我的删除功能出了问题。第一个删除是没有问题的,但如果我尝试删除或添加另一个之后,它就不工作了。我想一定是某物。用我的数组,但是什么?我看到了.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);
});发布于 2013-12-05 21:29:55
问题在于,要给出一个索引,而不是实际的对象,即:
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];
}
}发布于 2013-12-05 21:30:06
您有一个对象数组,不要使用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
}
}发布于 2013-12-05 22:10:46
首先,您应该保留要删除的项的索引,中断循环,然后删除。我用的是分裂。不要在循环中直接删除。
其次,你有一个拼写错误,如果这是你想要删除的错误的话,那么我就会在低俗小说中删除。
这段代码起作用
<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);
});https://stackoverflow.com/questions/20411071
复制相似问题