Javascript 对象数组,按父对象分组';s对象

Javascript 对象数组,按父对象分组';s对象,javascript,arrays,sorting,ecmascript-6,Javascript,Arrays,Sorting,Ecmascript 6,我有一组物体。我希望能够在父对象中对对象进行分组,父对象由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 },

我有一组物体。我希望能够在父对象中对对象进行分组,父对象由
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 },
    ]},
  ];

您必须遍历数组,创建一个新数组,并评估所需的条件,如果满足,则将其放入新数组中

Object.keys(数据).forEach((值,索引)=>{
//代码

})
您可以检查
代理的属性,将新对象推送到结果集中,或将对象推送到前一个对象的chunks数组中

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}],
分组=数据。减少((r,o)=>{
if(o.broker){
r、 push(Object.assign({},o,{chunks:[]}));
}否则{
r[r.length-1]。chunks.push(o);
}
返回r;
}, []);
控制台日志(分组)

.as console wrapper{max height:100%!important;top:0;}
使用
reduce
在每次累加器运行到
true
值时添加到累加器中,如果它运行到
false
值,则通过属性
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);
}, []);
const数据=[
{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},
];
让结果=数据。减少((a,cv)=>{
设len=a.长度-1;
返回(cv[“broker”])?(a.push(cv),a):(a[len][“chunks”]|;(a[len][“chunks”]=[]),a[len][“chunks”]。push(cv),a);
}, []);

控制台日志(结果)您正在浏览每个对象的键

Object.key(数据).forEach(key=>{
console.log(数据[index].property)

})
你的具体问题在哪里?@NinaScholz你是什么意思?我希望能够将父对象中的对象分组。我无法实现这种分组。你尝试过什么吗?@NinaScholz当然,这就是为什么问的原因,无论如何,谢谢你的正确答案。“当然,这就是为什么问的原因”-那么你为什么不发布你的代码?仅仅复制并粘贴某人的答案并不能帮助您理解自己做错了什么。
Object.keys()
用于数组?O.oObject.keys(data).forEach(key=>{console.log(data[key].property)})像
Object.keys
中的
Object
一样,这个方法是针对对象的,而不是针对数组的。为什么相同的“答案”会出现两次?记住,它是一个对象数组,因此可以使用forEach