angular - 如何将数组元素分组到新的组数组?

我有一系列行:

this.lines = [
    0: {indexLine: 0, group: 16, columns: [,…]}
    1: {indexLine: 1, group: 16,…}
    2: {indexLine: 2, group: 16,…}
    3: {indexLine: 3, group: 9,…}
    ]

我想按组对行进行分组,以便能够在不同的 tables 中呈现它。

我试过这个:

let arr: any = {};
        this.lines.forEach((line) => {
          if (!arr[line.group]) {
            arr[line.group] = [];
          }

          arr[line.group].push(line);
        });

回答1

您可以使用 Set 从对象数组中获取唯一的 group values。 new Set(lines.map(x => x.group) 将为您提供一组唯一的 values 组。

使用 Array.from() 将该集合转换为数组。

现在您可以使用 map 遍历唯一组 values 和 Array.filter 会为您提供所有匹配的元素。

let lines = [
    {indexLine: 0, group: 16},
    {indexLine: 1, group: 16},
    {indexLine: 2, group: 16},
    {indexLine: 3, group: 9},
];

const groupedLines = Array.from(new Set(lines.map(x=>x.group))).map(y => lines.filter(z => z.group === y));

console.log(groupedLines);

回答2

你可以使用 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce 方法来得到你想要的:

const result = this.lines.reduce((acc, item) => {
  if (!acc[item.group]) {
    acc[item.group] = [];
  }
  acc[item.group].push(item);
  return acc;
}, {});

如果您想将所有组作为多个数组而不是一个对象,您可以使用 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values 来做到这一点:

const groups = Object.values(result);

回答3

你可以使用 https://lodash.com/docs/4.17.15#groupBy

yarn add lodash.groupby (或 npm install lodash.groupby --save

import groupBy from 'lodash.groupby'; // 12.6k (gzipped 4.8k)

// ...

console.log(groupBy(this.lines, ({group}) => group)));

(不言自明的代码,每分钟 0 个 WTF)

相似文章

r - 由于某些标准,在个体中找到最佳组合

我想从许多人中随机组成一组。对于个人,我有关于他们的位置(两种可能性)和他们所属位置的团队的信息。目前尚不清楚有多少人将加入。应根据以下限制组成组:团体一般应由3-4人组成在一个组内,位置之间的份额(...

java - 根据整数将 string 分成组

是否可以将string每第n个字符分组?例如,假设我有一个string包含以下内容:“Hellohowareyou”我想要做的是,如果用户输入4,然后基于整数,分成4个组并将它们分配给strings。...

最新文章