为什么filter方法没有删除数组的所有元素?

时间:2019-04-07 21:54:31

标签: javascript node.js ecmascript-6

this.arol.filter(x=>x.length!==0
                ?(this.arol.splice(this.arol.indexOf(x),1))
                :!true)

我试图以多种不同的方式更改它,但是它仍然不能删除数组的所有元素,它总是在删除大多数元素后留下1或2个...。我认为问题出在条件上。我们正在检查数组元素的长度是否不为0(都是字符串)...

4 个答案:

答案 0 :(得分:5)

splice期间不要尝试filter -而是从filter回调返回一个true或false值,这取决于您是否想要将要迭代的项目包括在新数组中,并使用从.filter返回的结果数组:

this.arol = this.arol.filter(x => x.length !== 0);
^^^^^^^^^^^^

答案 1 :(得分:2)

如果您要保持相同的外部数组引用并更改原始数组,则从头到尾进行工作时可以 进行循环拼接,以免影响索引,但您尚未到达更改数组长度:

const arr = [[1],[],[2]]
arr.reduceRight((_,c,i) => c.length || !!arr.splice(i,1))

console.log(arr)

答案 2 :(得分:0)

问题是您在尝试使用过滤器的同时尝试进行拼接。过滤器不会从您的数组中删除元素,而是使用过滤后的数据创建一个新的数组,如下所述:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

您可以将结果分配给SomePerformance建议的同一数组。

答案 3 :(得分:0)

如果从该代码中删除了Splice,则不会删除元素。 this.arol.splice(this.arol.indexOf(x),1)在这里将迭代该数组中的每个元素,而x将是当前迭代,它将按照您编写的splice方法从该数组进行拼接。删除splice,它将正常工作。