我试图从数组中删除索引,并使用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
,但它的数量正在减少。为什么会这样?
答案 0 :(得分:6)
您正在更改dataarray
数组。
只是将一个对象(包括数组)分配给变量并不进行复制。非原始变量的值是对该值的引用。这里,两个变量具有相同的参考。 dataarray
和temp_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
});
附注:从您的数据中看,您好像要在过滤器中使用data.childid
而不是data.id
。