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

例如:

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

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

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


当前回答

删除Vs接头

从数组中删除项时

var arr=[1,2,3,4];删除arr[2]//结果[1,2,3:,4]控制台日志(arr)

当您拼接时

var arr=[1,2,3,4];arr.splice(1,1)//结果[1,3,4]控制台日志(arr);

如果删除,元素将被删除,但索引仍为空

而在拼接元件被删除的情况下,其余元件的索引相应地减少

其他回答

因为delete只从数组中的元素中删除对象,所以数组的长度不会改变。拼接将删除对象并缩短阵列。

以下代码将显示“a”、“b”、“undefined”、“d”

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

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

而这将显示“a”、“b”、“d”

myArray = ['a', 'b', 'c', 'd']; myArray.splice(2,1);

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

IndexOf也接受引用类型。假设以下场景:

var arr=[{项:1},{项2},{项3}];var发现=发现(2,3)//伪代码:将返回〔{item:2},{item:3}〕var l=基础长度;而(l-){var索引=arr.indexOf(找到[l])arr.splice(索引,1);}控制台日志(arr.length)//1.

不同之处:

var item2 = findUnique(2); //will return {item: 2}
var l = arr.length;
var found = false;
  while(!found && l--) {
  found = arr[l] === item2;
}

console.log(l, arr[l]);// l is index, arr[l] is the item you look for

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

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

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

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

目前有两种方法可以做到这一点

使用夹板()arrayObject.spling(索引,1);使用deletedelete arrayObject[index];

但我始终建议对数组对象使用拼接,对对象属性使用删除,因为删除不会更新数组长度。