如何合并包含对象的两个数组

时间:2017-09-20 15:19:15

标签: javascript arrays merge

有一个数组A:

   let arrA = [{
      name: 'twitter',
      active: true
    }, {
      name: 'medium',
      active: false
    },
     {
      name: 'platinum',
      active: false
    }
  ];

阵列B:

let arrB = [{
      name: 'twitter',
      active: false
    }, {
      name: 'medium',
      active: false
    }
  ];

我怎样才能得到一个如下所示的数组:

let newArr = [{
      name: 'twitter',
      active: true
    }, {
      name: 'medium',
      active: false
    },
    {
      name: 'platinum',
      active: false
    }
  ];

我需要active中对象的newArr属性等于oractive对象的arrA属性之间的arrB属性name相同的地方。

arrAarrB可以有不同的长度

3 个答案:

答案 0 :(得分:2)

这是我的方法。使用地图

<form id='myform'>
    <textarea id='mytext'></textarea>
</form>

希望有所帮助!

答案 1 :(得分:0)

  1. 创建一个空数组:var newArr = [];
  2. 将对象推送到newArr,其中对象键和值在arrAarrB之间进行比较。
  3. 完成。
  4. let arrA = [
          {
            name: 'twitter',
            active: true
          },
          {
            name: 'medium',
            active: false
          }
        ];
    let arrB = [
          {
            name: 'twitter',
            active: false
          },
          {
            name: 'medium',
            active: false
          }
        ];
    let newArr = [];
        
    for (var i = 0; i < arrA.length; i++){
      newArr.push({
        name: arrA[i].name,
        active: arrA[i].active || arrB[i].active,
      });
    }
    
    console.log(newArr);

答案 2 :(得分:0)

这是一个用于此目的的功能:

function MyFunction(firstArray, secondArray) {
    firstArray = firstArray.map(e => {
        if (secondArray.some(_e => _e.name === e.name))
            e.active = e.active || secondArray.filter(f => f.name == e.name)[0].active;
            return e;
        });

        return [...newA, ...arrB.filter(e => !arrA.some(s => s.name === e.name))];
}