Vue:如何从数组中删除对象的值?

时间:2016-10-07 18:56:08

标签: javascript vue.js

是否可以通过它的值从数组中删除对象,而不是通过for循环没有迭代的索引?

我尝试使用迭代删除元素,但它看起来不会删除迭代元素:

App.$refs.userContent.foo : [1,2,3,4]
console.log(App.$refs.userContent.foo);
App.$refs.userContent.foo.forEach(function(x,i) 
 {
App.$refs.userContent.foo.$remove(i);

});
console.log(App.$refs.userContent.foo);

结果:

[1, 2, 3, 4, __ob__: Observer]

[3, 4, __ob__: Observer]

为什么它不删除所有元素?

5 个答案:

答案 0 :(得分:1)

当你从数组中删除元素时,你正在改变剩下的元素的索引。如果要删除所有元素,请在.forEach()中执行以下操作:

// Keep removing first array element until they're all gone
App.$refs.userContent.foo.$remove(0);

......但是清空数组会很奇怪。

回答原始问题 - 否。您无法在一个步骤中按值删除数组元素。首先必须找到元素的索引,然后通过索引删除它。在vanilla JS中,您可以使用.splice()通过索引删除元素:

// Remove 4th element from array
myArray.splice(3, 1);

答案 1 :(得分:0)

您可能想要使用过滤功能。例如:

[1,2,3,4].filter(x => x != 2)

从值为2的数组中删除项目。

答案 2 :(得分:0)

必须迭代数组才能找到要按值删除的元素。所以答案是否定的。

你可能会欺骗它欺骗你如何做到这一点,但最终它仍然必须找到你想要删除的值的元素。如果数组已排序,有一些方法可以优化搜索。

答案 3 :(得分:0)

在Vue 1中,阵列上有$remove方法,您可以在其中传递引用。

this.items.$remove(item)

我认为这已经在Vue 2中消失了。您可以使用indexOf而不是循环。类似的东西:

var index = this.items.indexOf(item);
if (index > -1) {
  this.items.splice(index, 1)
}

答案 4 :(得分:0)

我遇到了同样的问题,我修正了它:键入v-for