zoukankan      html  css  js  c++  java
  • 数组里面对象去重的四种方法

    去重数据:

    var arr = [{
          key: '01',
          value: '西施'
        }, {
          key: '02',
          value: '王昭君'
        }, {
          key: '03',
          value: '杨玉环'
        }, {
          key: '04',
          value: '貂蝉'
        }, {
          key: '01',
          value: '西施'
        }, {
          key: '01',
          value: '西施'
        }];

    方法一:

    利用对象访问属性的方法,判断对象中是否存在key
    var result = [];
        var obj = {};
        for (var i = 0; i < arr.length; i++) {
          if (!obj[arr[i].key]) {
            result.push(arr[i]);
            obj[arr[i].key] = true;
          }
        }
        console.log(result); // [{key: "01", value: "西施"},{key: "02", value: "王昭君"},{key: "03", value: "杨玉环"},{key: "04", value: "貂蝉"}]

    方法二:

    利用两层for循环和布尔值的方法进行去重
    var result = [];
        for (var i = 0; i < arr.length; i++) {
          var flag = true;
          for (var j = 0; j < result.length; j++) {
            if (arr[i].key === result[j].key) {
              flag = false;
            }
          }
          if (flag) {
            result.push(arr[i]);
          }
        }
        console.log(result); // [{key: "01", value: "西施"},{key: "02", value: "王昭君"},{key: "03", value: "杨玉环"},{key: "04", value: "貂蝉"}]

    方法三:

    利用两层for循环和splice的方法进行去重,此方法会更改数组的原始数据
    for (var i = 0; i < arr.length; i++) {
          for (var j = i + 1; j < arr.length; j++) {
            if (arr[i].key === arr[j].key) {
              arr.splice(j, 1);
              j = j - 1;
            }
          }
        }
        console.log(arr); // [{key: "01", value: "西施"},{key: "02", value: "王昭君"},{key: "03", value: "杨玉环"},{key: "04", value: "貂蝉"}]

    方法四:

    利用reduce方法遍历数组,reduce第一个参数是遍历需要执行的函数,第二个参数是item的初始值(ie9以下不支持此方法)
    var obj = {};
        arr = arr.reduce(function (item, next) {
          obj[next.key] ? '' : obj[next.key] = true && item.push(next);
          return item;
        }, []);
        console.log(arr); // [{key: "01", value: "西施"},{key: "02", value: "王昭君"},{key: "03", value: "杨玉环"},{key: "04", value: "貂蝉"}]
  • 相关阅读:
    CE6内核启动过程新角度
    Eboot 中给nandflash分区实现
    Feedsky 上 csdn blog 订阅数排名 (zz)
    c# 枚举 enum 类型
    64bit系统下操作注册表的注意事项 ZZ
    良方治奇病,Visual Studio正则替换大法 (转)
    关于23种设计模式的有趣见解
    NHibernate快速指南(一)
    网站、数据库的衍变之路(二) (转)
    网站、数据库的衍变之路(一) (转)
  • 原文地址:https://www.cnblogs.com/cyfeng/p/12175986.html
Copyright © 2011-2022 走看看