【问题标题】:Duplicates in object array对象数组中的重复项
【发布时间】:2015-01-23 23:24:51
【问题描述】:

已编辑!!

我有一个对象array

Array 0:[{id:"a1" , code:"123" , name:"a"},
         {id: "a2", code: "222" , name: "a"},
          {id: "b1", code: "433", name: "b"}]
Array 1:[{id:"a1" , code:"123" , name:"a"},
         {id: "b2", code: "211" , name: "b"},
          {id: "b1", code: "433", name: "b"}]

我想获取“名称”没有重复值的对象数组。并将其存储到另一个array

Result:
Array 0:{id: "b1", code: "433", name:"b"}
Array 1: {id:"a1" , code:"123" , name:"a"}

如何获取没有 name 重复值的对象数组? 我在某个线程上发现的只是从数组中删除重复项,而不是获取没有重复项的数组。提前致谢!

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:
    function filterByName(array) {
        var counts = {};
    
        array.forEach(function(obj) { 
            counts[obj.name] ? ++counts[obj.name] : (counts[obj.name] = 1);
        });
    
        return array.filter(function(obj) { 
            return counts[obj.name] === 1;
        });
    }
    
    var filteredArray1 = filterByName(array1);
    var filteredArray2 = filterByName(array2);
    

    功能说明

    1. 创建临时的counts 对象以保持同名对象的计数。
    2. 使用标准的数组forEach方法向该对象填充数据。
    3. 使用标准filter 方法过滤数组

    UPD 如果我最终正确理解您的问题,您需要这个:

    var filteredArray = arrayOfArrays.map(function(arrayOfObjects) {
      return filterByName(arrayOfObjects)[0];
    });
    

    【讨论】:

    • 您能解释一下吗?
    • return !temp[obj.name] && temp[obj.name] = true; 行出现错误提示“分配中的左侧无效”
    • @LewJasonNuyda:运算符优先级。请改用return !temp[obj.name] && (temp[obj.name] = true);
    • @FelixKling 是的,我忘了优先级
    • @FelixKling 完成,添加说明。
    猜你喜欢
    • 2012-11-24
    • 2021-07-06
    • 2012-05-19
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多