在数组元素上使用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:delete将删除对象属性,但不会重新索引或更新其长度。这使它看起来像是未定义:拼接:实际删除元素,重新索引数组,并更改其长度。
从最后一个删除元素
arrName.pop();
从第一个删除元素
arrName.shift();
从中间删除
arrName.splice(starting index,number of element you wnt to delete);
Ex: arrName.splice(1,1);
从最后一个元素中删除一个元素
arrName.splice(-1);
使用数组索引号删除
delete arrName[1];
其他回答
保持简单:-
当您删除数组中的任何元素时,它将删除所述位置的值,并使其为空/未定义,但该位置存在于数组中。
var arr=[1,2,3,4,5];函数del(){删除arr[3];控制台日志(arr);}德尔(arr);
其中,与拼接原型一样,参数如下//arr.splice(开始删除的位置,要删除的项目数)
var arr=[1,2,3,4,5];函数spl(){arr.splice(0,2);//arr.splice(开始删除的位置,要删除的项目数)控制台日志(arr);}spl(arr);
应用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。
最简单的方法可能是
var myArray = ['a', 'b', 'c', 'd'];
delete myArray[1]; // ['a', undefined, 'c', 'd']. Then use lodash compact method to remove false, null, 0, "", undefined and NaN
myArray = _.compact(myArray); ['a', 'c', 'd'];
希望这有帮助。参考:https://lodash.com/docs#compact
如上多次所述,使用夹板()看起来非常合适。Mozilla文档:
splice()方法通过删除现有元素和/或添加新元素来更改数组的内容。var myFish=['angel','小丑','普通话','鲟鱼'];myFish.splice(2,0,'鼓');//myFish是[“天使”、“小丑”、“鼓”、“普通话”、“鲟鱼”]myFish.splice(2,1);//myFish是[“天使”、“小丑”、“普通话”、“鲟鱼”]语法array.拼接(开始)array.spling(开始,删除计数)array.spling(start,deleteCount,item1,item2,…)参数开始开始更改阵列的索引。如果大于数组的长度,则实际起始索引将设置为数组的长度。如果是否定的,将从结尾开始许多元素。删除计数一个整数,指示要删除的旧数组元素的数量。如果deleteCount为0,则不会删除任何元素。在这种情况下,应至少指定一个新元素。如果deleteCount大于数组中从开始时剩余的元素数,则将删除数组末尾的所有元素。如果省略deleteCount,deleteCount将等于(arr.length-start)。项目1,项目2。。。要添加到数组的元素,从开始索引开始。如果不指定任何元素,splice()将只从数组中删除元素。返回值包含已删除元素的数组。如果只删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。[...]
从核心JavaScript 1.5参考>运算符>特殊运算符>删除运算符:
删除数组元素时数组长度不受影响。对于例如,如果删除[3],则[4]为仍然a[4]和a[3]未定义。这即使删除最后一个数组的元素(删除a[a.length-1])。