【问题标题】:How to get the matching second array of object in es6如何在es6中获取匹配的第二个对象数组
【发布时间】:2019-08-08 06:52:33
【问题描述】:

我有两个对象数组:- 更好的解决方案

array1= [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
array2 = [{id:5,name:"samsung"},{id:2,name:"panasonics"},{id:7,name:"Lg"}];

预期输出为: 如果第一个数组和第二个数组 id 匹配意味着取第二个数组名 在上面的例子中 id 2 匹配,我们需要 id:2,name: panasonics。

o/p:

 [{id:1,name:"samsung"},{id:2,name:"panasonics"},{id:3,name:"Lg"},{id:5,name:"samsung"},{id:7,name:"Apple"}]

【问题讨论】:

    标签: javascript typescript ecmascript-6 es6-promise ecmascript-5


    【解决方案1】:

    使用Array.concat()组合数组,通过id将它们归约为Map,然后使用Array.from()将Map的值转换为数组:

    const unionBy = (field, ...arrays) => Array.from(
      [].concat(...arrays)
      .reduce((r, o) => r.set(o.id, o), new Map)
      .values()
    );
    
    const array1 = [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
    const array2 = [{id:5,name:"samsung"},{id:2,name:"panasonics"},{id:7,name:"Lg"}];
    
    const result = unionBy('id', array1, array2);
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      您可以使用简单的.forEach() 循环,如下所示(您也可以使用for 循环,但.forEach() 更容易)。

      此代码循环通过array1,并在该循环中循环通过array2。然后它检查 id 是否相同。如果有,则将名称附加到结果中。

      const array1= [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
      const array2 = [{id:5,name:"samsung"},{id:2,name:"panasonics"},{id:7,name:"Lg"}];
      let result = [];
      
      array1.forEach(e1 => {
        array2.forEach(e2 => {
          if (e1.id == e2.id) {
            result.push(e2.name);
          }
        });
      });
      
      console.log(result);

      【讨论】:

        【解决方案3】:

        像下面的代码一样使用 map() 和 concat()

        array1= [{id:1,name:"samsung"},{id:2,name:"nokia"},{id:3,name:"Lg"}];
        array2 = [{id:5,name:"samsung"},  {id:2,name:"panasonics"},{id:7,name:"Lg"}];
        var array3=array1.map(function(i,v){
        if(array2[v].id==i.id){
        return array2[v]
        }
        else return i
        })
        array4=array3.concat(array2);
        console.log(array4);
        

        【讨论】:

          猜你喜欢
          • 2021-11-04
          • 2020-01-21
          • 2021-03-21
          • 2020-04-04
          • 2020-04-24
          • 1970-01-01
          • 2019-06-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多