JS每日说2-----数组去重

63 阅读1分钟

1.正常遍历

function remove(arr){
    let result = []; //空数组保存结果。
    for(var i =0;i<arr.length;i++){  //循环遍历数组。
      if(!result.includes(arr[i])){ //对于arr中每一项:查看result中是否有该项。
        result.push(arr[i]); //如果result中没有就push进去。
      }
    }
    return result;//返回结果
}    

2.利用Object属性名单一特性

原理:将数组每一项当做属性名传给空对象,再用Object.keys取出。

function remove(arr){
    let obj = {};//创建空对象。
    for(i=0;i<arr.length;i++){  //遍历数组。
      if(!obj[arr[i]]){  //对于每一项:查看obj中是否有该属性名。
        obj[arr[i]]=true; //如果没有,就为obj设置该属性名,属性值为ture。
      }
    }
    return Object.keys(obj);/Object.keys取出属性名。
}

plus:关于取出对象属性的写法。

let obj = {
    a:213,
    b:true,
    c:'444'
}
 我们常用是.写法:obj.a,obj.b。
 其实还有另一种obj[]写法:obj['a'],obj['b'],这里需要注意[]中是字符串。
 漏掉'',比如obj[a],js会认为a是个变量,而上下文没定义a则会赋值undefined,从而报错。
obj.a  //213
obj['a'] //213
obj[a] //ReferenceError: a is not defined

3.利用ES6的Set集合

let arr = [1,2,3,3,3,4,1,7,8]
let result = new Set(arr) //Set[6] 
plus:Set集合转为数组的方法:
1.[...result] //[1, 2, 3, 4, 7, 8]
2.Array.from(result) //[1, 2, 3, 4, 7, 8]