javascript - 如何合并任意数量的对象数组而不重复?
问题描述
我已经对此进行了搜索,但解决方案希望您知道要合并多少个数组而不会重复。
我必须循环一个包含任意数量数组的对象。数组中的对象是类型{sType: string, nLaId: number, sname: string}
要确定一个对象是否是重复的,必须检查是否有另一个具有相同sType
AND的对象nLaId
。
for(let key in objectContainingArrays){ // objectContainingArrays[key] is an array with specific objects of type {sType: string, nLaId: number, sname: string}
// how would I merge the arrays here in the fastest way without duplicates?
}
如果解决方案很明显或者可以在另一个问题中找到解决方案,那么我很抱歉,我会很感激一个链接。谢谢!
解决方案
如果你没有使用任何像 underscore.js 这样的库。您可以先连接数组,然后过滤掉重复项 -
var mergedArray = [].concat.apply([], arrList);
var uniqueArray = mergedArray.filter((currentValue, index, arr) =>
arr.findIndex (
arrItem => (
arrItem.sType === currentValue.sType && arrItem.nLaId === currentValue.nLaId)
) === index
);
下面是一个示例 -
var arr1 = [{
sType: "S1",
nLaId: 1,
sname: "N1"
},
{
sType: "S2",
nLaId: 2,
sname: "N2"
},
{
sType: "S3",
nLaId: 3,
sname: "N3"
}
];
var arr2 = [{
sType: "S2",
nLaId: 2,
sname: "N4"
},
{
sType: "S2",
nLaId: 2,
sname: "N5"
},
{
sType: "S1",
nLaId: 3,
sname: "N6"
},
{
sType: "S4",
nLaId: 3,
sname: "N7"
}
];
var arr3 = [{
sType: "S1",
nLaId: 1,
sname: "N8"
},
{
sType: "S2",
nLaId: 2,
sname: "N9"
}
];
var arrList = [arr1, arr2, arr3];
var mergedArray = [].concat.apply([], arrList);
var uniqueArray = mergedArray.filter((currentValue, index, arr) =>
arr.findIndex(arrItem => (arrItem.sType === currentValue.sType && arrItem.nLaId === currentValue.nLaId)) === index);
console.log(uniqueArray);
推荐阅读
- regex - 结果中特定匹配的 XML 正则表达式替换
- javascript - 从对象进行 AES-CCM 解密的节点解密
- c# - 如何让图形打开然后在 C# 中执行命令脚本
- html - 输入类型=文本字段中的数据大小是否有限制?
- r - left_join 不合并所有值
- java - 简单java归档代码中的FileNotFound Exception错误
- python - 打开一个文本文件并转换为第一个字母为大写,其余为小写
- ubuntu - apt-get update 无法获取存储库
- scala - Scala:从导入创建函数列表
- asp.net-core - Swashbuckle Swagger - 从属性中提取信息并将其放入模式定义中