javascript - 过滤重复项并将它们分组到单独的数组中
问题描述
我需要获得具有完全相同 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
}
]
]
我到了有一大堆重复项的那一刻,但是我无法将它们分组
解决方案
您使用 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);
推荐阅读
- python - OpenCV 安装树莓派 3B 模型
- c# - 在 ASP.NET Core 中,如何知道用户是否满足最低年龄?
- html - 身体{背景:网址(3.jpg)不起作用
- d - 我可以从 FreeImage 导出的最高位深度灰度图像是多少?
- ios - Xamarin iOS 推送通知在 iOS 13 中停止工作
- c# - 将焦点从一个 datagridview 更改为另一个,同时从第一个网格视图单元格按下箭头键
- java - 使用预编译的jasper文件还是在运行时编译jrxml模板更好?
- c# - 垂直数字签名外观 C# ITextSharp
- html - 如何隐藏垂直滚动条,但仍然可以滚动但不能隐藏垂直滚动条
- node.js - 为什么浏览器不以保存 cookie 的方式保存 JWT 令牌?