js数组去重 参考《web高效编程与优化实践》--李银城著
let arr = [3,62,11,5,1,33,23,33,18,33];
1.使用Set+Array
function uniqueArray(arr) {
return Array.from(new Set(arr));
}
优点:代码简洁,速度快;
缺点:Set和Array都需要另外分配存储空间;
2.Array
function uniqueArray(arr) {
let retArray = [];
for(let i = 0; i < arr.length; i++) {
retArray.indexOf(arr[i]) < 0 && retArray.push(arr[i]);
}
return retArray
}
解析:如果retArray数组中不含有arr中的某个元素,则把这个元素push到retArray中,以此去重;
3.使用splice
function uniqueArray(arr) {
for(let i = 0; i < arr.length - 1; i++) {
for(let j = i + 1; j < arr.length ; j++) {
arr[i] === arr[j] && arr.splice(j--, 1);
}
}
return arr
}
解析: 关键的地方在于splice中的index是j--,也就是说找到了j是先删掉了找到的元素,然后-1,这里为什么要-1,是因为进入循环时,还要+1.,但是splice删除后,后面的元素会补上前面删除的元素,所以要-1,才能保证每个元素都能遍历到,直至删掉每一个重复的元素。