美文网首页
js 对象数组去重最优雅的方法

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

作者: 马小帅mm | 来源:发表于2019-05-05 19:31 被阅读0次

    要去重的数组,要求根据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]))
    }
    

    完美!!!!

    相关文章

      网友评论

          本文标题:js 对象数组去重最优雅的方法

          本文链接:https://www.haomeiwen.com/subject/nkmmnqtx.html