数组去重

72 阅读1分钟

1. Set

  const arr = [11, 11, 22, 33, 44, 55, 22, 33]
    function getUniqueArray(arr) {
      // 方式一
      // const res = Array.from(new Set(arr))
      // 方式二
      const res = [...new Set(arr)]
      return res
    }

  console.log(getUniqueArray(arr));

2. filter

  const test = [1, 1, 2, 3, 3, 4, 5]
    function getUniqueArray(arr) {

      const res = arr.filter((item, index) => {
        //  返回第一个满足条件的
        return arr.indexOf(item) === index
      })
      return res
    }
  console.log(getUniqueArray(test));

3.reduce

    const test = [1, 1, 2, 3, 3, 4, 5]
    function getUniqueArray(arr) {

      const res = arr.reduce((pre, item) => {
        return pre.includes(item) ? pre : [...pre, item]
      }, [])
      return res
    }
    console.log(getUniqueArray(test));

4. 双循环+splice

    const arr = [11, 11, 11, 22, 33, 44, 55, 22, 33]
    function getUniqueArray(arr) {
      const res = []
      for (let i = 0; i < arr.length; i++) {
        // 判断后面的有没有跟之前一样的
        for (let j = i + 1; j < arr.length; j++) {
          if (arr[i] === arr[j]) {
            arr.splice(i, 1);
            j--
          }
        }
        res.push(arr[i])
      }
      return res
    }
    console.log(getUniqueArray(arr));

5. 双循环破解

    const test = [1, 1, 1, 2, 2, 3, 3, 4, 5]
    function getUniqueArray(arr) {
      var res = []
      for (let i = 0; i < arr.length; i++) {
        // 判断该索引后面的索引后面有没有一样的
        for (let j = i + 1; j < arr.length; j++) {
          // 第一个元素 和 后面所有元素比较 看看有没有相同的
          if (arr[i] === arr[j]) {
            // 直接多加一次 相当于跳过了本次循环
            i++;
          }
        }
        // 判断完之后就加入进去
        res.push(arr[i])
      }
      return res
    }
    console.log(getUniqueArray(test));

6. 利用对象key

    const test = [21, 21, 2, 3, 3, 4, 5]
    function getUniqueArray(arr) {
      const res = {}
      // 以 数组的值 为key值 进行动态添加对象
      arr.forEach((item, index) => {
        res[arr[index]] = '无所谓'
      })
      //   Object.keys(res)得到的是个数组 肯定不会改变原数组呀
      return Object.keys(res).map(item => ~~item)

    }
    console.log(getUniqueArray(test));

7. 排序

        const test = [11, 11, 11, 2, 3, 3, 4, 5]

        //  排序之后两个安在一起的话 就需要删除
        // 练习快排
        function fast(arr) {
            if (arr.length < 2) return array
            // 找到一个点
            var point = arr[arr.length - 1]
            // 
            var left = arr.filter(item => item < point)
            var right = arr.filter(item => item > point)
            return [...fast(left), point, ...fast(right)]
        }

        function getUniqueArray(arr) {
            var res = []
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] !== arr[i + 1]) {
                    res.push(arr[i])
                }
            }
            console.log(res);
        }
        getUniqueArray(fast(test))