前端实战总结JavaScript数组去重(前端实战总结JavaScript数组去重)
前端实战总结JavaScript数组去重(前端实战总结JavaScript数组去重)不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉“{}”空对象。 //[1 "true" true 15 false undefined null NaN "NaN" 0 "a" {} {}] var arr = [1 1 'true' 'true' true true 15 15 false false undefined undefined null null NaN NaN 'NaN' 0 0 'a' 'a' {} {}]; console.log(unique(arr))
一、利用ES6 Set去重(ES6中最常用)
function unique (arr){
return Array.from(new Set(arr))
}
var arr = [1 1 'true' 'true' true true 15 15 false false undefined undefined
null null NaN NaN 'NaN' 0 0 'a' 'a' {} {}];
console.log(unique(arr))
//[1 "true" true 15 false undefined null NaN "NaN" 0 "a" {} {}]
不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象,后面的高阶方法会添加去掉“{}”空对象。
二、利用for嵌套for,然后splice去重(ES5中最常用)
function unique(arr){
for(var i=0; i<arr.length; i ){
for(var j=i 1;j<arr.length; j ){
if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个
arr.splice(j 1);
j--;
}
}
}
return arr;
}
var arr = [1 1 'true' 'true' true true 15 15 false false undefined undefined null null NaN NaN'NaN' 0 0 'a' 'a' {} {}];
console.log(unique(arr))
//[1 "true" 15 false undefined NaN NaN "NaN" "a" {…} {…}]
双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值
三、利用indexOf去重
新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。
四、利用sort()
利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。
五、利用对象的属性不能相同的特点进行去重
六、利用includes
function unique(arr) {
var obj = {};
return arr.filter(function(item index arr){
return obj.hasOwnProperty(typeof item item) ? false : (obj[typeof item item] = true)
})
}
利用hasOwnProperty 判断是否存在对象属性。
八、利用filter
九、利用递归去重
十、利用Map数据结构去重
创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果。
十一、利用reduce
十二、[...new Set(arr)]
有问题可以私信小编:web