我有一系列对象。我希望能够将对象归为父对象的对象,父对象由broker: true
确定。有没有办法将其转换:
const data = [
{ id: 1, broker: true },
{ id: 2, broker: false },
{ id: 3, broker: false },
{ id: 4, broker: true },
{ id: 5, broker: false },
{ id: 6, broker: true },
{ id: 7, broker: false },
{ id: 8, broker: false },
{ id: 9, broker: false },
];
变成这样:
const data = [
{ id: 1, broker: true, chunks: [
{ id: 2, broker: false },
{ id: 3, broker: false },
]},
{ id: 4, broker: true, chunks: [
{ id: 5, broker: false },
]},
{ id: 6, broker: true, chunks: [
{ id: 7, broker: false },
{ id: 8, broker: false },
{ id: 9, broker: false },
]},
];
答案 0 :(得分:1)
您可以检查broker
的属性,然后将一个新对象推送到结果集中,或者将该对象推送到先前对象的块数组。
const
data = [{ id: 1, broker: true }, { id: 2, broker: false }, { id: 3, broker: false }, { id: 4, broker: true }, { id: 5, broker: false }, { id: 6, broker: true }, { id: 7, broker: false }, { id: 8, broker: false }, { id: 9, broker: false }],
grouped = data.reduce((r, o) => {
if (o.broker) {
r.push(Object.assign({}, o, { chunks: [] }));
} else {
r[r.length - 1].chunks.push(o);
}
return r;
}, []);
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
每次使用reduce
到累加器时,将其添加到true
值中;如果运行到false
值中,则通过属性{{ 1}}
chunks
data.reduce((a, cv) => {
let len = a.length - 1;
return (cv["broker"]) ? (a.push(cv), a) : (a[len]
["chunks"] || (a[len]["chunks"] = []), a[len]
["chunks"].push(cv), a);
}, []);
答案 2 :(得分:-1)
您必须遍历数组,创建一个新数组并评估所需条件,如果满足,则将其放入新数组中
Object.keys(data).forEach((value, index) => {
// code
})
答案 3 :(得分:-1)
您正在浏览每个对象的键
Object.keys(data).forEach(key => {
console.log(data[index].property)
})
找到