首页 > 解决方案 > 如何合并任意数量的对象数组而不重复?

问题描述

我已经对此进行了搜索,但解决方案希望您知道要合并多少个数组而不会重复。

我必须循环一个包含任意数量数组的对象。数组中的对象是类型{sType: string, nLaId: number, sname: string} 要确定一个对象是否是重复的,必须检查是否有另一个具有相同sTypeAND的对象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?
}

如果解决方案很明显或者可以在另一个问题中找到解决方案,那么我很抱歉,我会很感激一个链接。谢谢!

标签: javascriptarraystypescriptmergeduplicates

解决方案


如果你没有使用任何像 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);


推荐阅读