繁体   English   中英

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

[英]Why is filter method not deleting all elements of the array?

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

我试图通过许多不同的方式改变它,但它仍然没有删除数组的所有元素,它总是留下1或2后面删除大多数....我认为问题是条件...我们是检查数组元素的长度是否为0(都是字符串)...

filter不要尝试splice - 而是从filter回调中返回一个真值或假值,具体取决于您是否要在新数组中包含要迭代的项,并使用从中返回的结果数组.filter

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

如果你想保持相同的外部数组引用和mutate原始,你可以在循环中拼接,如果你从头到尾工作,以便不影响你在更改数组长度时尚未到达的索引:

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

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

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

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

如果从该代码中删除了Splice,那么它将不会删除元素。 this.arol.splice(this.arol.indexOf(x),1)这里它将遍历该数组中的每个元素, x将是当前迭代,当你编写了splice方法时,它将从数组中拼接出来。 删除splice它会工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM