数组去重及排序

106 阅读1分钟

前言: 最近在准备面试, 找工作的问题, 听之前的同学说关于数组去重的实现问的比较多,特写此播客记录.

   //先定义一个数组
   let arr = [
      {id: 1, content: 'nihao'},
      {id: 2, content: 'nihao'},
      {id: 4, content: 'nihao'},
      {id: 5, content: 'nihao'},
      {id: 2, content: 'nihao'},
      {id: 3, content: 'nihao'},
      {id: 1, content: 'nihao'}
    ]
    function setArr1(arr) {
      const newArr = []
     // 第一种方法
      // arr.forEach(item => {
      //   const i = newArr.findIndex(it => it.id === item.id)
      //   if (i === -1) newArr.push(item)
      // })
     // 第二种方法 
      // arr.forEach(item => {
      //   if (!newArr.some(ele => ele.id === item.id)) newArr.push(item)
      // })
     // 第三种方法
      arr.forEach(item => {
        const obj = newArr.find(it => it.id === item.id)
        if (!obj) newArr.push(item)
      })
      return newArr.sort((a,b) => {
        return a.id - b.id
      })
    }
    console.log(setArr1(arr))

上面是对象的去重 普通数组的去重

    let arr3 = [1, 2, 3, 4, 7, 3, 4, 5]
    // 简单数据类型去重
    function SetArr(arr) {
      const set = new Set(arr)
      const newArr = [...set] // 1
      const arr2 = Array.from(set) // 2
      const arr3 = []
      arr.forEach(item => {
        if (!arr3.includes(item)) arr3.push(item)
      }) // 3
      return arr3.sort((a,b) => {
        return a - b
      }) // 做一个排序
    }
    console.log(SetArr(arr3))

更新一个数组的排序, 之前遇到的是基于字符串ASCII的一个排序

    let arr = [
      {code: 'A', content: 'nihao'},
      {code: 'C', content: 'nihao'},
      {code: 'B', content: 'nihao'}
    ]
    function mySort (arr) {
        arr.sort((a,b) => {
            return (a.code.charCodeAt() - b.code.charCodeAt())
        })
        return arr
    }
    let arr1 = mySort(arr)