我有一个函数可以返回一个对象(键是字符串,值是字符串数组):
{"myType1": ["123"]}
我想合并所有返回的结果,例如-如果我有:
{"myType1": ["123"]}
{"myType2": ["456"]}
{"myType1": ["789"]}
我想得到
{"myType1": ["123", "789], "myType2": ["456"]}
I've seen Object.assign
,但是它不会合并值,而是将其替换为最新的值。
有人能举例说明我如何实现这一目标吗?
任何帮助表示赞赏。
谢谢。
答案 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' ] } ]
致谢。