是否可以通过它的值从数组中删除对象,而不是通过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]
为什么它不删除所有元素?
答案 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