我的删除功能遇到了一些问题。第一次删除没有问题,但如果我尝试删除或添加另一个后它不起作用。我认为必须是......我的阵列,但是什么?我看到.live功能,但它没有用。
var data = [{
title: "40 männlich Jungfrau sucht",
director: "Judd Apatow",
year: 2005,
playTime: 116,
fsk: 14
}, {
title: "Pulp Ficiton",
director: "Quentin Tarantino",
year: 1994,
playTime: 148,
fsk: 16
}, {
title: "Inglourious Basterds",
director: "Quentin Tarantino",
year: 2009,
playTime: 148,
fsk: 16
}];
$('button').click(function () {
for (var e in data) {
if (data[e].title == $(this).attr('value')) {
delete data[e];
}
}
drawTable(data);
});
答案 0 :(得分:2)
问题是 for 为你提供了一个索引,而不是实际的对象,即:
for (i in data) console.log(i); // 0, 1, 2
所以你得到的问题是,在第一次删除之后,下一个索引不再有效。为了解决这个问题,你可以向后迭代:
for (var i = data.length-1 ; i>=0 ; i--) {
if (data[i].title == $(this).attr('value')) {
delete data[i];
}
}
答案 1 :(得分:2)
您有一个对象数组,不要使用for in
循环进行迭代。您的delete
也会删除整个数组索引,如果需要,请使用splice
,如果没有,请定位密钥:
for (var i = 0; i < data.length; i++) {
if (data[i].title == $(this).attr('value')) {
data.splice(i, 1); //to delete whole array chunk
delete data[i].title; //delete field
}
}
答案 2 :(得分:1)
首先,你应该坚持你需要删除的项目的索引,打破循环,然后删除。我用过分裂。不要直接在循环中删除。
其次,你在纸浆小说中有一个拼写错误,如果那是你试图删除的那个。
此代码有效
<button value="Pulp Fiction">Button</button>
var data = [{
title: "40 männlich Jungfrau sucht",
director: "Judd Apatow",
year: 2005,
playTime: 116,
fsk: 14
}, {
title: "Pulp Fiction",
director: "Quentin Tarantino",
year: 1994,
playTime: 148,
fsk: 16
}, {
title: "Inglourious Basterds",
director: "Quentin Tarantino",
year: 2009,
playTime: 148,
fsk: 16
}];
$('button').click(function () {
var indexToDelete = 4;
for (var e in data) {
if (data[e].title.toString() == $(this).attr('value')) {
indexToDelete = e;
break;
}
}
data.splice(indexToDelete,1);
console.log(data);
});