javascript splice

时间:2015-06-12 07:27:20

标签: javascript jquery

我试图从数组中删除索引,并使用javascript splice来实现它。但奇怪的事情正在发生。

var dataarray = [{"childid":"1275","id":"5501"},
                    {"childid":"1276","id":"5501"},
                    {"childid":"1277","id":"5502"},
                    {"childid":"1278","id":"5502"},
                    {"childid":"1279","id":"5501"}
                    ,{"childid":"1280","id":"5501"}];
var temp_dataarray = dataarray;

$.each(dataarray, function(i, data) {
    if(data.id != 1275)
    {
        temp_dataarray.splice(i, 1);
        console.log(' Dataarray count : '+dataarray.length);
        console.log(' Temp count : '+temp_dataarray.length);
    }

});

console.log输出

 Dataarray count : 5   
 Temp count : 5   
 Dataarray count : 4      
 Temp count : 4   
 Dataarray count : 3   
 Temp count : 3   
 TypeError: data is undefined   

在我的代码中,我并没有改变dataarray,但它的数量正在减少。为什么会这样?

1 个答案:

答案 0 :(得分:6)

正在更改dataarray数组。

只是将一个对象(包括数组)分配给变量并不进行复制。非原始变量的值是对该值的引用。这里,两个变量具有相同的参考。 dataarraytemp_dataarray是相同的数组。

这里的解决方案是克隆数组。

替换

var temp_dataarray = dataarray;

var temp_dataarray = dataarray.slice();

但请注意,有一些更简单的解决方案来过滤数组:

var dataarray = [{"childid":"1275","id":"5501"},
                    {"childid":"1276","id":"5501"},
                    {"childid":"1277","id":"5502"},
                    {"childid":"1278","id":"5502"},
                    {"childid":"1279","id":"5501"}
                    ,{"childid":"1280","id":"5501"}];

var temp_dataarray = dataarray.filter(function(data){
     return data.id == 1275
});

Demonstration

附注:从您的数据中看,您好像要在过滤器中使用data.childid而不是data.id