在数组元素上使用delete运算符与使用array.splice方法有什么区别?
例如:
myArray = ['a', 'b', 'c', 'd'];
delete myArray[1];
// or
myArray.splice (1, 1);
如果我可以像删除对象那样删除数组元素,为什么还要使用拼接方法?
在数组元素上使用delete运算符与使用array.splice方法有什么区别?
例如:
myArray = ['a', 'b', 'c', 'd'];
delete myArray[1];
// or
myArray.splice (1, 1);
如果我可以像删除对象那样删除数组元素,为什么还要使用拼接方法?
当前回答
好的,假设我们有下面这个数组:
const arr = [1, 2, 3, 4, 5];
让我们先删除:
delete arr[1];
结果是:
[1, empty, 3, 4, 5];
空的让我们来看看:
arr[1]; //undefined
所以意味着只是删除了值,现在它是未定义的,所以长度是相同的,也会返回true。。。
让我们重新设置阵列,这次使用拼接进行操作:
arr.splice(1, 1);
这是这次的结果:
[1, 3, 4, 5];
如您所见,数组长度已更改,arr[1]现在为3。。。
此外,这将返回数组中已删除的项目,在这种情况下为[3]。。。
其他回答
如果要删除的元素位于中间(例如,我们要删除索引为1的“c”),可以使用:
var arr = ['a','b','c'];
var indexToDelete = 1;
var newArray = arr.slice(0,indexToDelete).combine(arr.slice(indexToDelete+1, arr.length))
对于那些想使用Lodash的人,可以使用:myArray=_.无(myArray,itemToRemove)
或如我在Angular2中所用
import { without } from 'lodash';
...
myArray = without(myArray, itemToRemove);
...
因为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]);
}
拼接将使用数字索引。
而delete可以用于其他类型的索引。。
例子:
delete myArray['text1'];
Array.remove()方法
jQuery的创建者John Resig创建了一个非常方便的Array.remove方法,我总是在项目中使用它。
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
下面是如何使用它的一些示例:
// Remove the second item from the array
array.remove(1);
// Remove the second-to-last item from the array
array.remove(-2);
// Remove the second and third items from the array
array.remove(1,2);
// Remove the last and second-to-last items from the array
array.remove(-2,-1);
John的网站