【问题标题】:Object.assign - merging arrays valuesObject.assign - 合并数组值
【发布时间】:2019-10-19 13:28:25
【问题描述】:

我有一个返回对象的函数(键是字符串,值是字符串数组):

{"myType1": ["123"]}

我想合并它返回的所有结果,例如 - 如果我有:

{"myType1": ["123"]}

{"myType2": ["456"]}

{"myType1": ["789"]}

我想买

{"myType1": ["123", "789], "myType2": ["456"]}

I've seenObject.assign 但是它不会将它只是替换为最新的值合并。

有没有人能举例说明我如何做到这一点?

任何帮助表示赞赏。

谢谢。

【问题讨论】:

  • 那么,你有一个返回对象的函数,然后你将函数返回的对象存储在一个数组中,或者只是想用返回的对象逐步更新一个起始的空对象?跨度>
  • 函数返回像{"myType1": ["123"]}这样的对象,因为每个对象都被接收到我想拼成一个

标签: javascript arrays typescript object


【解决方案1】:

这是一个包含所需过程的单行:

Array.from(new Set([{"myType1": ["123"]}, {"myType2": ["456"]}, {"myType1": ["789"]}].map(item => Object.keys(item)[0]).sort())).map(e => { const entry = {}; entry[e] = items.filter(item => Object.keys(item)[0] === e).map(item => item[e][0]); return entry })

结果:

[ { myType1: [ '123', '789' ] }, { myType2: [ '456' ] } ]

问候。

【讨论】:

    【解决方案2】:

    创建一个将每个属性添加到结果对象的函数,并使用您获得的每个对象调用它。

    let res = {};
    
    const addObj = obj => {
      Object.entries(obj).forEach(([k, v]) => (res[k] = res[k] || []).push(...v));
    };
    
    addObj({"myType1": ["123"]});
    addObj({"myType2": ["456"]});
    addObj({"myType1": ["789"]});
    
    console.log(res);
    .as-console-wrapper { max-height: 100% !important; top: auto; }

    【讨论】:

      【解决方案3】:

      您可以使用Object.keys 来获取对象的键。使用forEach 循环键并修改result 对象。

      var result = {};
      function mergeObj(o) {
        Object.keys(o).forEach(k=>{
          result[k] = ( result[k] || [] ).concat(o[k]);
        })
      }
      
      mergeObj({"myType1": ["123"]});
      mergeObj({"myType2": ["456"]});
      mergeObj({"myType1": ["789"]});
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-02
        • 2020-05-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        相关资源
        最近更新 更多