Object.assign-合并数组值

时间:2019-06-04 02:42:27

标签: javascript arrays typescript object

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

{"myType1": ["123"]}

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

{"myType1": ["123"]}

{"myType2": ["456"]}

{"myType1": ["789"]}

我想得到

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

I've seen Object.assign,但是它不会合并值,而是将其替换为最新的值。

有人能举例说明我如何实现这一目标吗?

任何帮助表示赞赏。

谢谢。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

制作一个将每个属性添加到结果对象的函数,然后对您获得的每个对象进行调用。

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; }

答案 2 :(得分:0)

这是具有所需工艺的一个衬里:

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' ] } ]

致谢。