打字稿:使用Lambda函数从两个数组中查找公共对象

时间:2018-05-02 12:51:29

标签: arrays typescript

我正在使用Typescript来解决以下问题。我想在列表中搜索不是简单字母或数字的对象。

以下是两个阵列。 我希望在不使用任何第三方库的情况下在单独的列表中获取常见对象。



    firstArray = [
           {
               "id": 4,
               "name": "Tata"
           },
           {
               "id": 11,
               "name": "Maruti"
           },
           {
               "id": 14,
               "name": "Mahindra"
           }
        ]

        secondArray = [
           {
               "id": 4,
               "name": "Tata"
           },
           {
               "id": 11,
               "name": "Maruti"
           },
           {
               "id": 15,
               "name": "Hyundai"
           },
           {
               "id": 21,
               "name": "Honda"
           } 
        ]
        
// Get Common Elements
// I am getting blank array as output

        console.log(firstArray.filter(( make ) => secondArray.includes( make)));




是否有良好的功能或方法来找出公共元素?

2 个答案:

答案 0 :(得分:5)

您可以将array#filterarray#some一起使用。对于第一个数组中的每个对象,检查另一个数组中是否存在idname



const firstArray = [{ "id": 4, "name": "Tata" }, { "id": 11, "name": "Maruti" }, { "id": 14, "name": "Mahindra" } ], 
      secondArray = [{ "id": 4, "name": "Tata" }, { "id": 11, "name": "Maruti" }, { "id": 15, "name": "Hyundai" }, { "id": 21, "name": "Honda" } ],
      result = firstArray.filter(o => secondArray.some(({id,name}) => o.id === id && o.name === name));
console.log(result);




答案 1 :(得分:2)

对于ES6,您也可以尝试集,

为了演示,

const thirdArray = [...new Set([...firstArray ,...secondArray])];