在数组元素上使用delete运算符与使用array.splice方法有什么区别?

例如:

myArray = ['a', 'b', 'c', 'd'];

delete myArray[1];
//  or
myArray.splice (1, 1);

如果我可以像删除对象那样删除数组元素,为什么还要使用拼接方法?


当前回答

你可以用这样的东西

var my_array=[1,2,3,4,5,6];删除my_array[4];console.log(my_array.filter(函数(a){return typeof a!=='undefined';}));//[1,2,3,4,6]

其他回答

应用delete运算符和splice()方法后,通过记录每个数组的长度可以看出差异。例如:

删除运算符

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
delete trees[3];

console.log(trees); // ["redwood", "bay", "cedar", empty, "maple"]
console.log(trees.length); // 5

delete运算符从数组中删除元素,但元素的“占位符”仍然存在。橡树已经被移除,但它仍然占用阵列中的空间。因此,阵列的长度保持为5。

拼接()法

var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
trees.splice(3,1);

console.log(trees); // ["redwood", "bay", "cedar", "maple"]
console.log(trees.length); // 4

splice()方法完全删除目标值和“占位符”。橡树已经被移除,以及它在阵列中占据的空间。阵列的长度现在为4。

为什么不只是过滤?我认为这是考虑js中数组的最清楚的方法。

myArray = myArray.filter(function(item){
    return item.anProperty != whoShouldBeDeleted
});

拼接将使用数字索引。

而delete可以用于其他类型的索引。。

例子:

delete myArray['text1'];

从核心JavaScript 1.5参考>运算符>特殊运算符>删除运算符:

删除数组元素时数组长度不受影响。对于例如,如果删除[3],则[4]为仍然a[4]和a[3]未定义。这即使删除最后一个数组的元素(删除a[a.length-1])。

如果您的阵列较小,可以使用过滤器:

myArray = ['a', 'b', 'c', 'd'];
myArray = myArray.filter(x => x !== 'b');