reduce方法对象数组去重

1,009 阅读1分钟
    var arrLike = {
      0:       {
      name: "Kitty",
      age: "25"
    },
      1:       {
      name: "Kitty",
      age: "25"
    },
      2:       {
      name: "Kitty",
      age: "26"
    },
    3: {
      name: "Kris",
      age: "24"
    },
    4: {
      name: "Andy",
      age: "25"
    },
    5: {
      name: "Kitty",
      age: "25"
    },
    6: {
      name: "Andy",
      age: "28",
      mme: 45
    },
    length: 7,
  }
  const normalArr = [1,1,2,3,5,5,6,6,8,9]

  /**
   * 
   * @param {Array} arr 数组或者伪数组
   * @param {String=} attr 去重里面attr重复的对象,可选值
   * @returns {Array} newArr 返回一个去重后的新数组
   */
  const deduplication = (arr, attr = '') => {
    if (!attr) { // attr为空,普通数组去重
      return [...new Set(arr)]
    } else { // attr为不空, 对象数组普通数组去重
      const dataReducer = (prev, cur) => {
        let obj = {}
        const attrValue = cur[attr]
        obj[attrValue] = cur
        return {
          ...prev,
          ...obj
        }
      }
      const reducedData = Array.prototype.reduce.call(arr, dataReducer, {})
      return Object.values(reducedData)
    }
  }
  console.log(deduplication(normalArr))