js 对象数组去重最优雅的方法

要去重的数组,要求根据name字段去重

let objArray = [{name: 1}, {name: 2}, {name: 3}, {name: 2}, {name: 1}]

最开始在网上找到的答案我是这样写的:

/**
 * 对象数组去重
 * objArray 对象数组
 * key 去重字段
 */

export default function arrayDe (objArray, key) {
  const hash = {}
  const newObjArray = objArray.reduce((item, next) => {
    hash[next[key]] ? '' : hash[next[key]] = true && item.push(next)
    return item
  }, [])
  return newObjArray
}

后来根据同事的提示,参考链接:https://segmentfault.com/q/1010000014361732/a-1020000014362688
改成了下面:

/**
 * 对象数组去重
 * objArray 对象数组
 * key 去重字段
 */
export default function arrayDe (objArray, key) {
  const hash = new Map()
  return objArray.filter(arr => !hash.has(arr[key]) && hash.set(arr[key], 1))
}

感觉是简洁了一点,但是还有更优雅的:

/**
 * 对象数组去重
 * objArray 对象数组
 * key 去重字段
 */
export default function arrayDe (objArray, key) {
  return objArray.filter((el, index, arr) => index === arr.findIndex(_el => _el[key] === el[key]))
}

完美!!!!

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 23,837评论 1 45
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 3,180评论 0 5
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 6,918评论 5 116
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 9,105评论 1 27
  • 无论白天走了多少路都要去散步天上,月亮有婉约的白地上有前行的影子有时被路灯的光亮偷走有时长长短短,有时互相叠在一起...
    鼠想说的阅读 163评论 1 7