我有一种情况,我在点击按钮时添加表格,每个表格都存储在数组中。现在当我删除2或3个表时,正在删除错误的索引。
addTable: function (obj) {
for (var i = 0; i < obj.length; i++) {
// Adding of table
array.push(obj)
// delete code of the table
(function (i) {
deleteButton.addEventListener('click', function (e) {
array.splice(i, 1);
});
})(i);
}
}
我面临的问题是i的值总是zero
。每次我点击按钮时,都会调用addTable
函数,计数器始终为zero
,并且也会传递给function(i)
。
关于如何跟踪不同的i或计数器的任何想法,以便它删除数组中的正确索引
以下是更新
这是我每次发送的示例对象。
每次我点击Add Table按钮时,都会传递相同的对象。现在我很难跟踪每个项目的索引。
答案 0 :(得分:1)
如果obj.length
未定义,i
将始终为0
更多,然后i < obj.length
返回false
,for
循环将永远不会执行
如果obj
传入此对象:
var addObjectResponse = [{...}];
然后addObjectResponse
是1的数组,因此i
总是0
i = 0
obj.length = 1
i < obj.length
=&gt; 0 < 1
=&gt;真一次
答案 1 :(得分:1)
一旦删除了一个表,所有其他表都已移动,并且您在删除按钮中安装的索引现在将出错。从阵列中删除项目时,所有索引都会移动。
所以,假设你删除了表3.然后,你按表4的删除。它的索引是4,但是因为你已经删除了表3,所以它现在在数组中的第3位(在上一次删除之后),但是,你的代码仍然有i == 4与该表相关联,并试图在这里删除它,但它不再存在了。
你在做什么并不是一个很好的方法。如果您想进一步扩展您真正想要做的事情,我们可以提供更好的解决方案。
鉴于我们到目前为止信息有限,我所知道的就是找到数组中的项目(无论它移到哪里)并从那里删除它。
addTable: function (obj) {
for (var i = 0; i < obj.length; i++) {
// Adding of table
array.push(obj)
// delete code of the table
(function (item) {
deleteButton.addEventListener('click', function (e) {
// search through the array to find where this item is
// and remove it from the array
for (var j = 0; j < array.length; j++) {
if (array[j] === item) {
array.splice(j, 1); // remove it
break;
}
}
});
})(obj);
}
}
答案 2 :(得分:1)
我不知道deleteButton
,但如果obj
是只有一个元素(length
等于1)的数组:[{....}]
和array.push
是原生的Array.prototype.push
方法:
addTable: function (obj) {
// Adding of table
var index=array.push(obj);
// delete code of the table
deleteButton.addEventListener('click', function (e) { array.splice(index, 1); });
}