首页 > 解决方案 > 对象数组,按父对象分组

问题描述

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

标签: javascriptarrayssortingecmascript-6

解决方案


您可以检查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; }


推荐阅读