array.splice vs将值设置为null

时间:2015-10-28 10:57:11

标签: javascript arrays

  

您应该使用array.splice(i, 1);而不是array[i] = null这将保留数组中的键

来源:Should I bother cleaning array in node.js?

我真的不明白这句话。为什么array[i] = null会更改数组的键?为什么array.splice(i, 1);更好?

2 个答案:

答案 0 :(得分:5)

array.splice(i, 1);将从数组中删除元素,因此更改数组的length

array[i] = null只会将索引i的值设置为null,而不会改变数组长度。这与delete array[i]相同,但delete运算符会将索引处的值设置为undefined

关于

  

为什么array[i] = null会更改数组的键?

我认为遗嘱和改变之间缺少一个词 not

所以,据我说,它应该是

  

为什么array[i] = null更改数组的键(或 length )?

第二个问题:

  

为什么array.splice(i, 1);更好?

它通过从中删除元素来更改数组的length。因此,当迭代数组时,您不必检查if(value == null)

完全使用哪一个取决于用例。

答案 1 :(得分:0)

通过简单的测试用例可以很容易地看到行为上的差异。这是Chrome从控制台输出的内容:

var test = ['a','b','c']
test[1] = null
["a", null, "c"]

var test = ['a','b','c']
test.splice(1, 1)
["a", "c"]

var test = ['a','b','c']
delete test[1]
["a", undefined × 1, "c"]

如您所见,splice是唯一一个将c的索引从2更改为1的方法。

您要使用哪一个取决于您的使用案例。可能存在一个固定长度数组的情况,并且您希望在不影响其后面的项目索引的情况下删除项目,在这种情况下拼接是不合适的。