在数组元素上使用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);
如果我可以像删除对象那样删除数组元素,为什么还要使用拼接方法?
当前回答
应用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。
其他回答
delete将删除对象属性,但不会重新索引数组或更新其长度。这使得它看起来像是未定义的:
> myArray = ['a', 'b', 'c', 'd']
["a", "b", "c", "d"]
> delete myArray[0]
true
> myArray[0]
undefined
请注意,它实际上没有设置为值undefined,而是从数组中删除了属性,使其看起来未定义。Chrome开发工具在记录阵列时打印为空,从而明确了这一区别。
> myArray[0]
undefined
> myArray
[empty, "b", "c", "d"]
splice(start,deleteCount)实际上删除了元素,重新索引数组,并更改其长度。
> myArray = ['a', 'b', 'c', 'd']
["a", "b", "c", "d"]
> myArray.splice(0, 2)
["a", "b"]
> myArray
["c", "d"]
对于那些想使用Lodash的人,可以使用:myArray=_.无(myArray,itemToRemove)
或如我在Angular2中所用
import { without } from 'lodash';
...
myArray = without(myArray, itemToRemove);
...
应用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。
拼接将使用数字索引。
而delete可以用于其他类型的索引。。
例子:
delete myArray['text1'];
删除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);
如果删除,元素将被删除,但索引仍为空
而在拼接元件被删除的情况下,其余元件的索引相应地减少