首页 > 解决方案 > 过滤重复项并将它们分组到单独的数组中

问题描述

我需要获得具有完全相同 key1 和 key2 的对象(重复)。对象 key3 之间的差异必须小于 1 才能将这些对象作为重复项传递。这些对象必须分组到单独的数组中。不重复的对象是不相关的,不会出现在输出中。

输入

[
    {
        key1: 'A',
        key2: 'B',
        key3: 5
    },
    {
        key1: 'C',
        key2: 'V',
        key3: 7
    },
    {
        key1: 'C',
        key2: 'V',
        key3: 6
    },
    {
        key1: 'A',
        key2: 'B',
        key3: 3
    },
    {
        key1: 'A',
        key2: 'B',
        key3: 5
    },
    {
        key1: 'L',
        key2: 'V',
        key3: 1
    },
    {
        key1: 'A',
        key2: 'B',
        key3: 6
    },
    {
        key1: 'A',
        key2: 'B',
        key3: 7
    }
]

输出

[
    [
        {
            key1: 'A',
            key2: 'B',
            key3: 5
        },
        {
            key1: 'A',
            key2: 'B',
            key3: 5
        },
        {
            key1: 'A',
            key2: 'B',
            key3: 6
        },
        {
            key1: 'A',
            key2: 'B',
            key3: 7
        }
    ],
    [
        {
            key1: 'C',
            key2: 'V',
            key3: 6
        },
        {
            key1: 'C',
            key2: 'V',
            key3: 7
        }
    ]
]

我到了有一大堆重复项的那一刻,但是我无法将它们分组

标签: javascript

解决方案


您使用 aset来存储相同的对象,key1然后key2获取多次出现的对象:

let set = {};
let list = [
     {
          key1: 'A',
          key2: 'B',
          key3: 5
     },
     {
          key1: 'C',
          key2: 'V',
          key3: 7
      },
      {
          key1: 'C',
          key2: 'V',
          key3: 1
      },
      {
          key1: 'A',
          key2: 'B',
          key3: 3
      },
      {
          key1: 'A',
          key2: 'B',
          key3: 5
      },
      {
          key1: 'L',
          key2: 'V',
          key3: 1
      }
];
for(let i = 0; i < list.length; i++){
     let obj = list[i];
     let k1 = obj['key1'], k2 = obj['key2'];
     if(!set[k1+k2])
          set[k1+k2] = [obj];
     else
          set[k1+k2].push(obj);
}
let res = [];
for (var key in set) {
     if (set.hasOwnProperty(key) && set[key].length > 1) {
          res.push(set[key])
     }
}
console.log(res);


推荐阅读