对象数组中的重复项

时间:2015-01-22 03:04:09

标签: javascript jquery arrays

EDITED !!

我有一个对象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"}]

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

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

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

1 个答案:

答案 0 :(得分: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方法
  4. 过滤数组

    <强> UPD     如果我最后正确理解你的问题,你需要这个:

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