在jquery对象列表上一起使用array.concat()和.slice()时失去范围

时间:2014-01-22 16:21:58

标签: javascript jquery scope concat slice

我认为代码会解释它,但我正在尝试将jquery对象列表分割成一个数组,然后将它们连接到另一个数组上,多次。无论如何在.each函数中我得到了lis变量中的元素,但是当我尝试将它们切片并连接到listItemArray时,它无法正常工作。我假设我正在失去范围或存在一些约束性问题,但我无法弄清楚它是什么。谢谢您的帮助。另外我知道有一个jquery.slice方法,但如果可能的话我想保留它。

var updateSection7 = function(desired) {

    var section = $('#' + _me.UUID + ' .section7yAxis');
    var showedList = section.find('ul:not(:hidden)');
    var listItemArray = [];
    var _slice = Array.prototype.slice;


    showedList.each(function(ind,el){
        var lis = $(el).find('.control-group');
        if(lis.length>1){               
            listItemArray.concat(_slice.call(lis));             
        }
    });
}

更新:在这里,我包括了解决问题的推送和连续版本,并且消除了每个请求浪费的cpu时间。

var updateSection7 = function(desired) {

    var lis = $('#' + _me.UUID + ' .section7yAxis ul:not(:hidden) .control-group');
    var listItemArray = [];
    var concatTester = [];
    var _slice = Array.prototype.slice;
    var _push = Array.prototype.push;

    //these end up doing the same thing 
    _push.apply(listItemArray, _slice.call(lis));
    concatTester = concatTester.concat(_slice.call(lis));
}

1 个答案:

答案 0 :(得分:3)

concat不会改变原始数组。它返回新数组。

试试这个:

listItemArray = listItemArray.concat(_slice.call(lis));