TL;博士;即使没有我的解释,我也可以查看下面的代码和输出,看看有些东西是可疑的。 Splice返回拼接的索引,但数据仍保留在数组中。
所以我有一个对象几乎像一个数组(0,1,2,3 ......等)。每个对象键都有一个数组值。该数组是一个对象数组。这是一个简化的对象,显示了我正在使用的基本结构:
obj = {
'1': [{},{},{},{}],
'2': [{},{},{},{}],
'3': [{},{},{},{}]
};
我有一些代码需要从其中一个数组中拼接出一个数组索引(对象)。这是代码,控制台记录所有内容(我将在下面显示输出)。
console.log(indices_to_remove);
for(j = 0; j < indices_to_remove.length; j++) {
console.log("i: " + i)
console.log('j: ' + j)
console.log(this._index);
console.log(this._index[i].splice(indices_to_remove[j], 1));
console.log(this._index);
}
注意第二个“console.log(this._index);”拼接对象仍然是原始数组的一部分。我认为this._index [2]现在只有一个项目。此外,我应该拼接索引0,但它返回索引1.
这是输出:
所以,如果有人对我可能做错了什么有任何见解,请大声说出来!
谢谢, 麦克
答案 0 :(得分:4)
你所展示的代码中有很多缺失,所以我不得不做一些猜测。我运行了这段代码,它按预期工作:
var obj = {
'1': [{},{},{},{}],
'2': [{},{},{},{}],
'3': [{},{},{},{}]
};
var indices_to_remove = [1];
var i = 1;
alert(indices_to_remove);
for(j = 0; j < indices_to_remove.length; j++) {
alert("i: " + i)
alert('j: ' + j)
alert(obj[i]);
alert(obj[i].splice(indices_to_remove[j], 1));
alert(obj[i]);
}
但是,您应该考虑在要删除的索引数组中向后循环。删除第一个项目后,第二个项目现在是第一个项目。如果您随后删除了第二个项目,那么它实际上是您删除的第三个项目。