javascript - 如何组合两个对象数组并删除在 IE11 中兼容的 javascript 中的重复对象
问题描述
我有 2 个具有以下结构的对象数组:
array1 = [
{
categoryID: 'C1',
links: [
(0: {
id: 1,
linkID: 'A',
}),
(1: {
id: 2,
linkID: 'B',
}),
],
},
{
categoryID: 'C2',
links: [
(0: {
id: 1,
linkID: 'C',
}),
(1: {
id: 2,
linkID: 'D',
}),
],
},
];
array2 = [
{
categoryID: 'C1',
links: [
(0: {
id: 1,
linkID: 'A',
}),
(1: {
id: 2,
linkID: 'E',
}),
],
},
{
categoryID: 'C3',
links: [
(0: {
id: 1,
linkID: 'F',
}),
],
},
];
我希望我的结果如下所示,因为两个数组都categoryID : 'C1'
应该合并为一个categoryID : 'C1'
,并且重复的 links[] 项应该合并在这一类别中。例如:linkID : "A'
在两个数组中都很常见,因此应该合并:
[
{
categoryID: 'C1',
links: [
(0: {
id: 1,
linkID: 'A',
}),
(1: {
id: 2,
linkID: 'B',
}),
(3: {
id: 3,
linkID: 'E',
}),
],
},
{
categoryID: 'C2',
links: [
(0: {
id: 1,
linkID: 'C',
}),
(1: {
id: 2,
linkID: 'D',
}),
],
},
{
categoryID: 'C3',
links: [
(0: {
id: 1,
linkID: 'F',
}),
],
},
];
请帮助我提供与 IE-11 或更低 IE 版本兼容的 javascript 代码。
我已经尝试过.map()
,.reduce()
但要么这些在 IE11 中不兼容,要么我做错了什么。
解决方案
首先按原样连接两个数组。然后将数组转换为普通对象(散列),其中键是应该唯一的字符串(categoryID、linkID)。这将删除重复项。然后转换回数组结构。
这适用于 Internet Explorer 11(已测试):
var array1 = [{ categoryID : "C1", links : [{ id : 1, linkID : "A" }, { id : 2, linkID : "B" }]}, {categoryID : "C2", links : [{ id : 1, linkID : "C" }, { id : 2, linkID : "D" }] }];
var array2 = [{ categoryID : "C1", links : [{ id : 1, linkID : "A" }, { id : 2, linkID : "E" }]}, {categoryID : "C3", links : [{ id : 1, linkID : "F" }] }];
var hash = array1.concat(array2).reduce(function (acc, o) {
acc[o.categoryID] = acc[o.categoryID] || {};
o.links.forEach(function (link) {
acc[o.categoryID][link.linkID] = 1;
});
return acc;
}, {});
var result = Object.keys(hash).map(function (cat) {
return {
categoryID: cat,
links: Object.keys(hash[cat]).map(function (link, i) {
return { id: i+1, linkID: link };
})
};
});
console.log(result);
推荐阅读
- javascript - 尝试在 Microsoft Edge 中注册服务人员的无效参数
- hadoop - 实现 hivemall 回归函数的问题
- android - Pixel 手机上的 checkLocationSettings 返回 RESOLUTION_REQUIRED
- android - 使用分页库刷新数据的正确方法 - 数据库 + 网络
- javascript - PWA 离线模式无法从移动浏览器的缓存中加载
- angular - (NG2-CHARTS) 无法绑定到图表类型,因为它不是
- react-native - React Native:没有 forceUpdate 的更新?
- java - 如何使用 pdfbox 2 在复选框外观流上设置边框
- php - 如何重建没有重复和其他限制的数组?
- php - 获取两个日期之间的差异