js 对象数组去重

目的

过滤掉数组里面指定属性相同的元素(一个对象)

/**
 * js 对象数组去重
 * 测试数据
*/
const arr = [
  {
    id: 1,
    name: 'TL',
    job: 'web'
  },
  {
    id: 2,
    name: 'CH',
    job: 'teacher'
  },
  {
    id: 3,
    name: 'xx',
    job: 'web'
  },
  {
    id: 4,
    name: 'xx',
    job: 'other'
  }
]

/**
 * 方法一:利用 filter 方法
 * indIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置(下标)
*/
const filterAttr = (arr, attr = null) => {
  const r = arr.filter((element, index, self) => {
    return self.findIndex(el => el[attr] === element[attr]) === index
  })
  return r
}
console.log(filterAttr(arr, 'job'))

/**
 * 方法二:利用 reduce 方法
 * 过滤相同属性函数(相同则取第一个)
*/
const filterAttr = (arr, attr) => {
  const r = arr.reduce((prev, element) => {
    if (!prev.find(el => el[attr] === element[attr])) {
      prev.push(element)
    }
    return prev
  }, [])
  return r
}
console.log(filterAttr(arr, 'job'))

你可能感兴趣的:(js 对象数组去重)