使用delete
操作符和使用Array.splice
方法在数组元素上的区别是什么?
例如:
myArray = ['a', 'b', 'c', 'd'];
delete myArray[1];
// or
myArray.splice (1, 1);
如果我可以像操作对象一样删除数组元素,那为什么还需要splice方法呢?
使用delete
操作符和使用Array.splice
方法在数组元素上的区别是什么?
例如:
myArray = ['a', 'b', 'c', 'd'];
delete myArray[1];
// or
myArray.splice (1, 1);
如果我可以像操作对象一样删除数组元素,那为什么还需要splice方法呢?
filter
函数:myArray = ['a', 'b', 'c', 'd'];
myArray = myArray.filter(x => x !== 'b');
好的,想象一下我们有以下的数组:
const arr = [1, 2, 3, 4, 5];
让我们先做删除操作:
delete arr[1];
[1, empty, 3, 4, 5];
空的! 让我们开始吧:
arr[1]; //undefined
所以意味着只有值被删除了,现在是未定义的,所以长度是相同的,也会返回true...
让我们重置我们的数组,并这次使用splice来实现:
arr.splice(1, 1);
这次的结果如下:
[1, 3, 4, 5];
正如您所看到的,数组长度已经改变,arr[1]
现在是3...
此外,这将返回一个已删除的数组项,即在本例中为[3]
...
var arr = [1, 2, 3 , 4, 5];
function del() {
delete arr[3];
console.log(arr);
}
del(arr);
而在splice原型中,参数如下。 //arr.splice(开始删除的位置,要删除的项目数)
var arr = [1, 2, 3 , 4, 5];
function spl() {
arr.splice(0, 2);
// arr.splice(position to start the delete , no. of items to delete)
console.log(arr);
}
spl(arr);
var arr = ['a','b','c'];
var indexToDelete = 1;
var newArray = arr.slice(0,indexToDelete).combine(arr.slice(indexToDelete+1, arr.length))
IndexOf
也接受引用类型。假设有以下情况:
var arr = [{item: 1}, {item: 2}, {item: 3}];
var found = find(2, 3); //pseudo code: will return [{item: 2}, {item:3}]
var l = found.length;
while(l--) {
var index = arr.indexOf(found[l])
arr.splice(index, 1);
}
console.log(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
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];
想要使用Lodash的人可以使用以下代码:
myArray = _.without(myArray, itemToRemove)
或者,如我在Angular2中使用的那样:
import { without } from 'lodash';
...
myArray = without(myArray, itemToRemove);
...
最简单的方法可能是
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'];
myArray.filter(function(n){return n;})
。 - datfunction deleteFromArray(array, indexToDelete){
var remain = new Array();
for(var i in array){
if(array[i] == indexToDelete){
continue;
}
remain.push(array[i]);
}
return remain;
}
myArray = ['a', 'b', 'c', 'd'];
deleteFromArray(myArray , 0);
// 结果:myArray = ['b', 'c', 'd'];
.splice
,请参考这个问题:在JavaScript中从数组中删除元素。 - Rob Wdelete
和Array.prototype.splice
之间的区别。 - chharvey