又是老话题,数组去重

96
袁韩
2016.06.11 10:57* 字数 80

昨天看到一个讨论数组去重的文章,觉得代码可以再简洁一点。

普通解法

时间复杂度:O(n^2)

function unique(arr){
  return arr.reduce((ret, cur)=> {
    if (ret.includes(cur)) {
      return ret
    } else {
      ret.push(cur)
      return ret
    }
  }, [])
}

高效解法

把object对象看作hashTable的话,那么这个算法时间复杂度:O(n),但是空间复杂度为O(n)

// 没有处理字符与数字的重复性
function unique(arr){
  var dict = {}
  var ret = []

  arr.forEach((val) => {
    val in dict ? null : dict[val] = ret.push(val)
  })

  return ret
}
JS拾遗