我有一个像这样的对象,
var myObj = {
'id001':{ a:'a', b:'b', c:'c', d:'d', e:'e', f:'f', g:'g', h:'h', i:'i'},
'id002':{ a:'a', b:'b', c:'c', d:'d', e:'e', f:'f', g:'g', h:'h', i:'i'},
'id003':{ a:'a', b:'b', c:'c', d:'d', e:'e', f:'f', g:'g', h:'h', i:'i'},
'j':'j'
};
该对象可能包含许多键,如:'id001', 'id002', 'id003','id004',
...等,它只有一个键'j'
,我想将此对象传递给这样的reducer:
var newObj = Object.keys(myObj).reduce((c, v) => {
if (typeof myObj[v] === 'object') c = Object.assign(c, { id: v }, myObj[v]);
else c[v] = myObj[v];
return c;
}, {});
给我一个像这样的对象:
{id: "id001", a: "a", b: "b", c: "c", d: "d", e:"e", f:"f", g:"g", h:"h", i:"i", j:"j"}
问题是这个reducer只返回最后一个对象,我希望它返回一个这样的对象:
[
{id: "id001", a: "a", b: "b", c: "c", d: "d", e:"e", f:"f", g:"g", h:"h", i:"i", j:"j"},
{id: "id002", a: "a", b: "b", c: "c", d: "d", e:"e", f:"f", g:"g", h:"h", i:"i", j:"j"},
{id: "id003", a: "a", b: "b", c: "c", d: "d", e:"e", f:"f", g:"g", h:"h", i:"i", j:"j"}
]
有人可以帮助我吗?!
答案 0 :(得分:0)
您可以使用array#reduce
创建一个数组,并使用其键包含字符串id
的键推送所有对象。然后遍历生成的数组并添加所有没有id
密钥的密钥。
var myObj = { 'id001':{ a:'a', b:'b', c:'c', d:'d', e:'e', f:'f', g:'g', h:'h', i:'i'}, 'id002':{ a:'a', b:'b', c:'c', d:'d', e:'e', f:'f', g:'g', h:'h', i:'i'}, 'id003':{ a:'a', b:'b', c:'c', d:'d', e:'e', f:'f', g:'g', h:'h', i:'i'}, 'j':'j' },
result = Object.keys(myObj).reduce((r,id) =>{
if(id.includes('id')){
r.push({id, ...myObj[id]});
}
return r;
},[]);
Object.keys(myObj).forEach(k => {
if(!k.includes('id')){
result.forEach(o => o[k] = k);
}
});
console.log(result);