我为遇到的问题写了这个解决方案,但是我对此并不完全满意。似乎很危险,或者至少在不好的实践中,使用数组来重新定义自身,这有点像尝试定义一个单词,但在定义中使用该单词。谁能解释这为什么错了,或者为什么没问题?
let array = []
// other stuff happens to fill the array
array = array.filter(element => element !== true)
我这样做的原因是,我需要相同的变量名(出于这些目的,array
)才能在整个函数中保持一致。数组的内容可能会在返回数组之前添加或删除多次,具体取决于数组周围发生的其他行为。
让我知道这是否含糊不清,我会尽力澄清。谢谢!
答案 0 :(得分:1)
很好。分配的右侧(array.filter(element => element !== true)
)将首先进行评估,生成一个全新的数组,然后才将其分配回array
。
答案 1 :(得分:0)
您可以向后循环遍历数组并删除项目,以免分配其他数组而重新分配。
for (i = array.length - 1; i >= 0; --i) {
if (!!array[i]) {
array.splice(i, 1);
}
}
此解决方案是: