我有一个javascript函数,可以从对象数组中删除对象:
function RemoveFilter(filtArray,filtName) {
var filtCount = filtArray.length;
...
...
for (var i = 0; i < filtCount; i++) {
var filter = filtArray[i];
if (filter != undefined && filter.name == filtName) {
delete filtArray[i];
}
}
...
...
}
它有效,但我遇到了大问题。 不是完全删除对象,而是保留未定义的位置(这就是为什么我的if filter != undefined
)。
所以基本上,如果我在删除后添加一些东西,我不仅有新的值,还有那些未被破坏的,并且数组正在增长。
我删除对象的选择可能很差但是,我该如何处理这个问题呢?
考虑到filtArray[i].remove
根本不起作用。
答案 0 :(得分:3)
使用filter
创建一个新数组并将其分配回原始数组,而不是尝试修改一个混乱且容易出错的数组:
myArray = myArray.filter(function(item) {
return item.name !== name
});
答案 1 :(得分:2)
您想使用splice()
而不是删除。这应该有用。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi");
会给:
Banana,Orange,Lemon,Kiwi,Apple,Mango
如果您不想在删除其他元素的同时添加新元素,则可能需要执行此操作;
fruits.splice(2, 1);
结果将是:
Banana,Orange,Lemon
无耻地复制
在你的情况下,
function RemoveFilter(filtArray,filtName) {
var filtCount = filtArray.length;
for (var i = 0; i < filtCount; i++) {
var filter = filtArray[i];
if (filter != undefined && filter.name == filtName) {
filtArray.splice(i,1);
}
}
}
这将删除第i个对象,而不会在那里留下未定义的对象。
答案 2 :(得分:0)
使用splice()
通常是要走的路,你可以通过这样的方式使它变得干净:
function removeFilter(filtArray, filtName) {
var index = filtArray.indexOf(filtName);
filtArray.splice(index, 1);
}
您可以详细了解splice()
here。
编辑:
为您举例:
var dog = {name: 'Spot', type: 'Dog'};
var cat = {name: 'Meow', type: 'Cat'};
var animals = [dog, cat];
removeFilter(animals, dog); // -> Removes the dog object from the array
console.log(animals) // -> Only has the cat object remaining