【问题标题】:Merge objects from two different type arrays合并来自两个不同类型数组的对象
【发布时间】:2018-04-08 01:22:55
【问题描述】:

想象一下,我们有两个数组。每个包含不同类型的对象。例如:

let first: Foo[] = [
    { a: 12, b: 'x', c: 0 },
    { a: 43, b: 'y', c: 0 }
];

let second: number[] = [11, 15];

我想合并他们的对象,最终得到一个如下所示的数组:

let first: Foo[] = [
    { a: 12, b: 'x', c: 11 },
    { a: 43, b: 'y', c: 15 }
];

如您所见,我只想将第二个数组中的值分配给第一个数组中对象的 c 属性。

希望您能理解我对问题的解释。伙计们,我相信你们的技能!

【问题讨论】:

  • 你试过了吗?
  • 只有我一个人,还是这个问题每小时至少发布两次?
  • @sjahan 请提供至少一份副本,我将不胜感激。
  • 为什么有这么多反对票?我想你看到我的问题重复了,但你为什么不链接到类似的线程?

标签: javascript arrays typescript lodash


【解决方案1】:

我认为你应该这样做...... 也许不是最好的,但应该适用于你的情况:) 这很简单……

for(var i in second){
   var elem = second[i];
   first[i]['c'] = elem;
}

【讨论】:

    【解决方案2】:

    你可以zip将两个数组合二为一,

    const first: Foo[] = [
        { a: 12, b: 'x', c: 0 },
        { a: 43, b: 'y', c: 0 }
    ];
    
    const second: number[] = [11, 15];
    
    const result: Foo[] = first.map((e, i) => {
        return <Foo>Object.assign({}, e, { c: second[i] });
    });
    

    【讨论】:

    • 当然,这个解决方案简单且有效。但是,如果下一次需要 zip 到 b 或 a 或者某个不知道的关键因为它在运行时是通用的,会发生什么?
    【解决方案3】:

    像往常一样,Array.prototype.reduce 为类似的方法提供了良好的基础,例如这个……

    var listOfItems = [
      { a: 12, b: 'x', c: 0 },
      { a: 43, b: 'y', c: 0 }
    ];
    var listOfValues = [11, 15];
    
    
    function reassignValueToGivenKey(collector, item, idx) {
      item = Object.assign({}, item); // do not mutate original reference.
      item[collector.key] = collector.valueList[idx]; // reassign value.
      collector.itemList.push(item); // collect processed items separately.
      return collector;
    }
    
    var result = listOfItems.reduce(reassignValueToGivenKey, {
    
      key: 'c',
      valueList: listOfValues,
      itemList: []
      
    }).itemList;
    
    console.log('listOfItems : ', listOfItems);
    console.log('result : ', result);
    .as-console-wrapper { max-height: 100%!important; top: 0; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      相关资源
      最近更新 更多