如何从数组中正确删除对象?
How to properly delete object from array?
我有一个 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
根本不起作用。
您想使用 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
无耻地抄袭自W3Schools
在你的情况下,
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 个对象并且不会留下未定义的挂在那里。
通常使用 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
不要试图就地修改一个数组,这很混乱且容易出错,只需使用 filter
创建一个新数组并将其分配回原始数组:
myArray = myArray.filter(function(item) {
return item.name !== name
});
我有一个 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
根本不起作用。
您想使用 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
无耻地抄袭自W3Schools
在你的情况下,
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 个对象并且不会留下未定义的挂在那里。
通常使用 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
不要试图就地修改一个数组,这很混乱且容易出错,只需使用 filter
创建一个新数组并将其分配回原始数组:
myArray = myArray.filter(function(item) {
return item.name !== name
});