使用自身重新定义数组

时间:2018-08-07 13:17:23

标签: javascript arrays

我为遇到的问题写了这个解决方案,但是我对此并不完全满意。似乎很危险,或者至少在不好的实践中,使用数组来重新定义自身,这有点像尝试定义一个单词,但在定义中使用该单词。谁能解释这为什么错了,或者为什么没问题?

let array = []

// other stuff happens to fill the array

array = array.filter(element => element !== true)

我这样做的原因是,我需要相同的变量名(出于这些目的,array)才能在整个函数中保持一致。数组的内容可能会在返回数组之前添加或删除多次,具体取决于数组周围发生的其他行为。

让我知道这是否含糊不清,我会尽力澄清。谢谢!

2 个答案:

答案 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);
  }
}

此解决方案是:

  1. 快速
  2. 高效存储
  3. 不会干扰引用原始数组的任何其他代码。