1、利用对象的属性去重
思路:每次取出原数组的元素,然后再对象中访问这个属性,如果存在就说明重复
function unique(arr){var res =[];var json = {};for(var i=0;i<arr.length;i++){if(!json[arr[i]]){res.push(arr[i]);json[arr[i]] = 1;}}return res;
}console.log(unique([1,2,3,4,6,4,5,1])); // [1,2,3,4,6,5]
2、利用下标查询
function unique(arr){var newArr = [arr[0]];for(var i=0;i<arr.length;i++){if(newArr.indexOf(arr[i]) == -1){newArr.push(arr[i]);}}return newArr;
}console.log(unique([1,2,3,4,5,6,1,2,3])); // [1,2,3,4,5,6]
3、利用排序方法
function unique(arr){var newArr = arr.sort(); // [1,1,2,2,3,3,4,5,6]var result = [];for(var i=0;i<newArr.length;i++){if(result[result.length-1] != newArr[i]){result.push(newArr[i]);}}return result;
}console.log(unique([1,2,3,4,5,6,1,2,3])); // [1,2,3,4,5,6]
4、利用ES2015/ES6的 Set和Array.from()
function unique(arr){var obj = new Set(arr); // 返回一个对象var newArr2 = Array.from(obj); // 返回一个新数组return newArr2;
}console.log(unique([1,2,3,4,5,6,6,5,4])); // [1,2,3,4,5,6]