this.arol.filter(x=>x.length!==0
?(this.arol.splice(this.arol.indexOf(x),1))
:!true)
我试图以多种不同的方式更改它,但是它仍然不能删除数组的所有元素,它总是在删除大多数元素后留下1或2个...。我认为问题出在条件上。我们正在检查数组元素的长度是否不为0(都是字符串)...
答案 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
,它将正常工作。