您应该使用
array.splice(i, 1);
而不是array[i] = null
这将保留数组中的键
来源:Should I bother cleaning array in node.js?
我真的不明白这句话。为什么array[i] = null
会更改数组的键?为什么array.splice(i, 1);
更好?
答案 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的方法。
您要使用哪一个取决于您的使用案例。可能存在一个固定长度数组的情况,并且您希望在不影响其后面的项目索引的情况下删除项目,在这种情况下拼接是不合适的。