数组对象去重方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>对象数组去重</title>
  <script src="./jquery-3.3.1.min.js"></script>
</head>
<body>
<script type="text/javascript">
  //(1)对象数组去重:reduce()方法
  let log = console.log.bind(console);
  let person = [
    {id: 0, name: "小明"},
    {id: 1, name: "小张"},
    {id: 2, name: "小李"},
    {id: 3, name: "小孙"},
    {id: 1, name: "小周"},
    {id: 2, name: "小陈"},
  ];
  let obj = {};
  //对象集合去重:ES5:reduce()
  person = person.reduce((cur, next) => {
    obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
    return cur;
  }, [{id: 4, name: "jack"}, {id: 0, name: "小江"}]) //设置cur默认类型为数组,并且初始值为空的数组
  console.log(person);
  //(2)对象数组去重:filter()方法
  var arr = [{
    id: 1,
    name: 'Zane'
  }, {
    id: 1,
    name: 'Zane'
  }, {
    id: 2,
    name: 'Zouli'
  }]
  var result = [];
  result = uniqueFun(arr, "id");
  console.log(result);
  //(3)基本类型数组去重方式(ES6语法)
  const arr1 = [1, 1, 12, 2, 3];
  let resultArr = Array.from(new Set(arr1))
  console.log(resultArr);
  //对象集合去重
  //    person = arrayToDistinct(person,'id');
  //    log(person);
  //    let arrays={};
  //    arrays = arrayToDistinct(person,'id');
  //    log(arrays);

  /**
   * 对象数组去重,type表示对象里面的一个属性
   */
  function uniqueFun(arr, type) {
    const res = new Map();
    return arr.filter((a) => !res.has(a[type]) && res.set(a[type], 1));
  }


  /**
   * 对象数组去重
   * @param {any} array:数组
   * @param {any} field:去重字段
   */
  function arrayToDistinct(array, field) {
    let obj = {};
    array = array.reduce((cur, next) => {
      obj[next.id] ? "" : obj[next.id] = array.push(next);
      return cur;
    }, []);//设置cur默认类型为数组,并且初始值为空的数组
    return array;
  }
</script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值