【问题标题】:How to merge to indexed arrays?如何合并到索引数组?
【发布时间】:2020-12-01 17:21:59
【问题描述】:

我有以下对象:

object1 = [
 { title: "id", platformOne: value},
 { title: "name", platformOne: name }, 
 { title: "env", platformOne: env }
]

我想将它与另一个合并。相同的结构,相同的“标题”键,但紧随其后的键名不同:

object2 = [
 { title: "id", platformTwo: value},
 { title: "name", platformTwo: name }, 
 { title: "env", platformTwo: env }
]

我希望它看起来像这样:

object3 = [
 { title: "id", platformOne: value, platformTwo: value},
 { title: "name", platformOne: name, platformTwo: name }, 
 { title: "env", platformOne: env, platformTwo: env }
]

你能帮我解决这个问题吗?非常感谢。

【问题讨论】:

  • 请发帖尝试。提示:如果数组长度相同,请尝试Array#map
  • 你好像在找zipWith

标签: javascript arrays object ecmascript-6 merge


【解决方案1】:

你也可以使用它:

var object3 = [];

object1.forEach(function(item, index){ 
object3[index] = item; 
object3[index].platformTwo = object2[index].platformTwo;
});

【讨论】:

    【解决方案2】:

    你可以这样做:

    const object3 = object1.map((obj, idx) => ({...obj, ...object2[idx]}));
    

    【讨论】:

    • 你在末尾少了一个括号 object1.map((obj, idx) => ({...obj, ...object2[idx]}));
    • 是的.. 抱歉,现在已修复
    • 这是优雅而完美的。正是我在一行中寻找的。真的非常感谢!
    【解决方案3】:

    有很多不同的方法可以做到这一点,你可以使用reduce

    object1 = [
      { title: "id", platformOne: "value" },
      { title: "name", platformOne: "name" },
      { title: "env", platformOne: "env" },
    ];
    
    object2 = [
      { title: "id", platformTwo: "value" },
      { title: "name", platformTwo: "name" },
      { title: "env", platformTwo: "env" },
    ];
    arr = [object1, object2].flat();
    res = arr.reduce((r, o) => {
      if (!r[o.title]) r[o.title] = o;
      else r[o.title] = { ...r[o.title], ...o };
      return r;
    }, {});
    console.log(Object.values(res));

    如果你想简化上面的代码,你可以使用三元运算符

    object1 = [ { title: "id", platformOne: "value" }, { title: "name", platformOne: "name" }, { title: "env", platformOne: "env" }, ];
    object2 = [ { title: "id", platformTwo: "value" }, { title: "name", platformTwo: "name" }, { title: "env", platformTwo: "env" }, ];
    arr = [object1, object2].flat();
    res = arr.reduce(
      (r, o) => (
        !r[o.title] ? (r[o.title] = o) : (r[o.title] = { ...r[o.title], ...o }), r
      ),
      {}
    );
    console.log(Object.values(res));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2012-03-21
      • 2011-02-16
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多