【问题标题】:Add objects of two different Arrays添加两个不同数组的对象
【发布时间】:2021-09-17 14:42:47
【问题描述】:

我有两个数组,每个数组都有对象。如何最好地简化将两个对象添加到一个但在一个新列表中。例如

a = [{a:1, b:2, c:3}, {d:1, e:4, f:2}]
b = [{m:1, n:2, o:4}, {r:1,s:3,u:5}, {k:1,j:4,f:8}]

z = [{a:1, b:2, c:3, m:1, n:2, o:4}, {d:1, e:4, f:2, r:1,s:3,u:5}, {k:1,j:4,f:8}]

假设你有列表ab,我想将每个位置的对象一起添加到列表z中。

【问题讨论】:

标签: javascript arrays object ecmascript-6


【解决方案1】:

你可以这样merge这两个对象:

let a = [{a:1, b:2, c:3}, {d:1, e:4, f:2}]
let b = [{m:1, n:2, o:4}, {r:1,s:3,u:5}, {k:1,j:4,f:8}]

let z = [];

b.forEach((x, i) => {
     let merged = {...x, ...a[i]};
     z.push(merged)
})

console.log(z);

【讨论】:

    【解决方案2】:

    我会超过 ab 的最大长度并使用 Object.assign 复制值。假设您想要对任意两个数组的通用解决方案,其中任何一个都可能比另一个长,请注意您需要随时检查长度:

    z = [];
    for (let i = 0; i < Math.max(a.length, b.length); ++i) {
        const result = i < a.length ? a[i] : {};
        Object.assign(result, i < b.length ? b[i] : {});
        z.push(result);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      const a = [{a:1, b:2, c:3}, {d:1, e:4, f:2}];
      const b = [{m:1, n:2, o:4}, {r:1,s:3,u:5}, {k:1,j:4,f:8}];
      let c = [];
      
      if(a.length > b.length){
          c = a.map((e,i) => {
           return {
              ...e,
              ...b[i]
           }
         });
      }else{
        c = b.map((e,i) => {
            return {
              ...e,
              ...a[i]
           }
        });
      }
      console.log(c);

      【讨论】:

      • “试试这个” - 为什么?
      【解决方案4】:

      您可以先检查两个数组的长度,然后将它们合并。

      const a = [{ a: 1, b: 2, c: 3 }, { d: 1, e: 4, f: 2 }]
      const b = [{ m: 1, n: 2, o: 4 }, { r: 1, s: 3, u: 5 }, { k: 1, j: 4, f: 8 }]
      
      const mergeArrays = (arr1, arr2) => arr1.map((x, i) => ({ ...x, ...arr2[i] }))
      
      const z = a.length > b.length ? mergeArrays(a, b) : mergeArrays(b, a);
      console.log(z);

      【讨论】:

        【解决方案5】:

        逻辑

        • 创建一个新数组,其中两个数组的最大长度。使用该数组索引从数组ab 返回数据

        const a = [{ a: 1, b: 2, c: 3 }, { d: 1, e: 4, f: 2 }]
        const b = [{ m: 1, n: 2, o: 4 }, { r: 1, s: 3, u: 5 }, { k: 1, j: 4, f: 8 }];
        const z = Array.from({ length: Math.max(a.length, b.length) }, (_, index) => ({ ...a[index] , ...b[index] }));
        console.log(z);

        【讨论】:

        • 如果您需要“解决方法” (.fill(1)) 来使其正常工作,这可能不是最佳解决方案。
        • 这是我用来从两个数组中创建一个长度最大的新数组的逻辑。
        • Array.from({ length: Math.max(a.length, b.length) }, (_, index) =&gt; { ... })
        • @Andreas 这是一个更好的方法,我用它更新了我的解决方案。
        • 如果您使用Array.from(),则不需要额外的.map()Array.from() 为数组的每个元素执行一个作为第二个参数传递的函数,因此是 (_, index) =&gt; { ... } 部分。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-05
        相关资源
        最近更新 更多