splice方法有删除、替换、添加的功能。修改原数组……

语法:
array.splice(start, deleteCount[, item1[, item2[, …]]])

start
整数,如果大于数组长度,itemN有值则为添加否则不添加。

1
2
3
4
5
var arr=[1,2,3];
//arr.splice(4,2);
//console.log(arr);//[1,2,3]
arr.splice(4,2,2);
console.log(arr);//[1,2,3,2]

如果为负数,则从数组末尾倒数第一位。
detecount
整数,表示要移除的数组元素的个数。如果 deleteCount 是 0,则不移除元素。这种情况下,至少应添加一个新元素。如果 deleteCount 大于start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
itemN
要添加进数组的元素。如果不指定,则 splice() 只删除数组元素。
返回值
由被删除的元素组成的一个数组。未删除就是返回空数组。


删除

1
2
3
var arr=[1,2,3];
arr.splice(1,2);
console.log(arr);//[1]

替换

1
2
3
var arr=['a','b','c'];
arr.splice(1,2,'2','3');
console.log(arr);//['a','2','3']

添加

1
2
3
var arr=['a','b','c'];
arr.splice(1,0,'2','3');
console.log(arr);//['a','2','3','b','c']

数组去重

题目:牛客网数组去重试题
为 Array 对象添加一个去除重复项的方法

输入例子:[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’, ‘a’, NaN].uniq()
输出例子:[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’]

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
Array.prototype.uniq = function () {
var hasNaN = false;
for(var i=0;i<this.length;i++){
if(this[i]!==this[i])hasNaN=true;
for(var j=i+1;j<this.length;j++){
if(this[i]===this[j]||(hasNaN&&this[j]!==this[j])){
this.splice(j,1);
j--;
}
}
}
return this;
}

较复杂的数组,一般思路是先判断类型再做去重。
参考资料:MDN:Array.prototype.splice()
js删除数组里的某个元素
从 JavaScript 数组去重谈性能优化(玉伯)

本文地址: https://lxchuan12.github.io/2016/10/29/20161029-array-splice-uniq/