通过子字符串JavaScript对数组的元素进行分组

卡洛斯·萨拉扎(Carlos Salazar)

我有一个这样的元素列表

[{
  "id": 1,
  "id_team": "1.",
  "name": "Name",
}, {
  "id": 2,
  "id_team": "2.",
  "name": "Name",
}, {
  "id": 3,
  "id_team": "3.",
  "name": "Name",
}, {
  "id": 4,
  "id_team": "4.",
  "name": "Name",
}, {
  "id": 5,
  "id_team": "5.",
  "name": "Name",
}, {
  "id": 6,
  "id_team": "2.1.",
  "name": "Name",
}, {
  "id": 7,
  "id_team": "6.",
  "name": "Name",
}, {
  "id": 8,
  "id_team": "1.1.",
  "name": "Name",
}, {
  "id": 9,
  "id_team": "1.2.",
  "name": "Name",
}, {
  "id": 10,
  "id_team": "1.3.",
  "name": "Name",
}, {
  "id": 11,
  "id_team": "1.4.",
  "name": "Name",
}]

如示例中所示,我在列id_team有一些字符串,该字符串在数组中同一列中的其他字符串内

例如,为主队会1.1.1.1.2.等将成为其中的一部分1.

所以结果一定是这样

[{
  "id": 1,
  "id_team": "1.",
  "name": "Name",
  "subteams": [{
      "id": 8,
      "id_team": "1.1.",
      "name": "Name",
    }, {
      "id": 9,
      "id_team": "1.2.",
      "name": "Name",
    }, {
      "id": 10,
      "id_team": "1.3.",
      "name": "Name",
    }, {
      "id": 11,
      "id_team": "1.4.",
      "name": "Name",
    },],
}, {
  "id": 2,
  "id_team": "2.",
  "name": "Name",
  "subitems": [{
      "id": 6,
      "id_team": "2.1.",
      "name": "Name",
    },]
}, {
  "id": 3,
  "id_team": "3.",
  "name": "Name",
  "subitems": [],
}, {
  "id": 4,
  "id_team": "4.",
  "name": "Name",
  "subitems": [],
}, {
  "id": 5,
  "id_team": "5.",
  "name": "Name",
  "subitems": [],
}, {
  "id": 7,
  "id_team": "6.",
  "name": "Name",
  "subitems": [],
},]

这可行吗?我使用lodash,如果会更容易。

编辑

我有这样的东西

    teams.filter(item => item.id_team.length <= size).map((item) => {
        const subteams = teams.filter((team) => 
        team.id_team.indexOf(item.id_team) === 0 && item.id_team !== team.id_team);
        console.log(subteams);
        return {
          ...item,
          subteams,
        };
      }) || [];

有点儿麻烦,因为它会插入子团队数组中,但是问题是,它必须适用于许多级别,以本示例为例

[{
  "id": 1,
  "id_team": "1.",
  "name": "Team Name",
  "subteams": [{
    "id": 8,
    "id_team": "1.1.",
    "name": "Team Name",
  }, {
    "id": 9,
    "id_team": "1.2.",
    "name": "Team Name",
  }, {
    "id": 10,
    "id_team": "1.3.",
    "name": "Team Name",
  }, {
    "id": 11,
    "id_team": "1.4.",
    "name": "Team Name",
  }, {
    "id": 12,
    "id_team": "1.1.1",
    "name": "Team Name",
  }]
}, {
  "id": 2,
  "id_team": "2.",
  "name": "Team Name",
  "subteams": [{
    "id": 6,
    "id_team": "2.1.",
    "name": "Team Name",
  }]
}, {
  "id": 3,
  "id_team": "3.",
  "name": "Team Name",
  "subteams": []
}, {
  "id": 4,
  "id_team": "4.",
  "name": "Team Name",
  "subteams": []
}, {
  "id": 5,
  "id_team": "5.",
  "name": "Team Name",
  "subteams": []
}, {
  "id": 7,
  "id_team": "6.",
  "name": "Team Name",
  "subteams": []
}]

在此示例中,有一个团队id_team = 1.1.1.,我如何1.1.以相同的逻辑将该团队添加到具有id_team的团队的子团队中,我尝试递归使用相同的代码,但没有用。

卡洛斯·萨拉扎(Carlos Salazar)

从示例代码中,我只是检查subteams数组是否有数据,如果有,我使用带有递归函数的辅助函数并将其分配给subteams。

 getSubTeams(teams, size) {
      const filtered = teams.filter(item => item.id_team.length <= size);

      return filtered.map((item) => {
        let subteams = teams.filter((team) => team.id_team.indexOf(item.id_team) === 0 && item.id_team !== team.id_team);
        if (subteams.length > 0) {
          let aux = this.getSubTeams(subteams, size + 2);
          subteams = [
            ...aux,
          ];
        }
        return {
          ...item,
          subteams,
        };
      }) || [];
    },

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过匹配关键 php 中的字符串对数组中的项目进行分组

根据字符串值对数组项进行分组

按键中的字符串对数组值进行分组?

在 PySpark 2.2 中对数组列的每个元素进行子字符串化

如何在数组mongodb下的子文档中使用日期字符串对数据进行分组

在Javascript中对字符串值对数组进行排序

通过StudentId对数组进行分组,并找到具有相同元素的子数组的总和

linq按子字符串对数组中的字符串进行排序

希望通过子数组中的值对数组进行分组

通过嵌套从属数组元素对数组进行分组

在Java中对数组中的字符串进行分类和分组

如何根据数组的字符串元素的第一个字符在Javascript中对数组进行排序?-JavaScript

用字符串对数据框的值进行分组

根据表示PHP中时间的子字符串对数组项进行重新排序

根据使用JavaScript的相同元素对数组进行分组

如何对数组中的元素之间没有空格的字符串进行字符串化处理?

在Elastic Search中对数组元素进行查询字符串搜索

如何在PHP中通过字符串对数组进行“引用”

通过比较字符串值 swift 对数组进行排序

如何使用reactjs通过字符串,数字和日期属性对数组进行排序?

通过定义的数组元素的子字符串从定义的范围返回子数组

Javascript对象数组,基于部分字符串或子字符串进行搜索匹配

javascript-仅使用字符串中的数字对数组进行排序

如何在Javascript中对数组进行字符串化?

在JavaScript中对数字数组进行迭代会返回字符串

是否可以使用javascript标记的模板字符串对数组值进行插值?

对数组中的字符串进行排序

对数字的字符串数组列表进行排序

按字符串对数组进行排序