【问题标题】:In Javascript, is there a way to split an array into multiple arrays based on object property? [duplicate]在 Javascript 中,有没有办法根据对象属性将数组拆分为多个数组? [复制]
【发布时间】:2021-03-24 07:49:35
【问题描述】:

我有以下一群人:

const people = [
  { name: 'Tom Hiddleston', country: 'UK' },
  { name: 'Joe Biden', country: 'USA' },
  { name: 'James Bond', country: 'UK' },
  { name: 'Barack Obama', country: 'USA' },
  { name: 'Dolph Lundgren', country: 'SWEDEN' },
];

现在我想根据 country 属性将此数组分解为多个数组。

基本上我想要一个执行以下操作的魔术函数:

const peopleGroupedByCountry = magicFunction(people);
console.log(peopleGroupedByCountry);

// Should log the following:
[
  [
    { name: 'Tom Hiddleston', country: 'UK' },
    { name: 'James Bond', country: 'UK' },
  ],
  [
    { name: 'Joe Biden', country: 'USA' },
    { name: 'Barack Obama', country: 'USA' },
  ],
  [
    { name: 'Dolph Lundgren', country: 'SWEDEN' },
  ]
]

【问题讨论】:

  • @PranayNailwal 好吧,该链接使用下划线和 jquery 导致答案,而不是我所追求的。 Terry Lennox 在这里的回答是纯香草 js,效果很好。
  • 我会推荐特里的答案,因为它非常现代和优雅,而引用的问答大约是 8 年

标签: javascript arrays


【解决方案1】:

您可以使用 Array.reduce 来执行此操作,我们为每个国家/地区创建一个带有键的对象。

然后我们可以使用 Object.values 将它作为一个数组来获取。

const people = [
    { name: 'Tom Hiddleston', country: 'UK' },
    { name: 'Joe Biden', country: 'USA' },
    { name: 'James Bond', country: 'UK' },
    { name: 'Barack Obama', country: 'USA' },
    { name: 'Dolph Lundgren', country: 'SWEDEN' },
];

const grouped = Object.values(people.reduce((acc, item) => {
    // Append the item to the array for each country
    acc[item.country] = [...(acc[item.country] || []), item];
    return acc;
}, {}))

console.log(grouped)

【讨论】:

  • 最好添加另一个参数来分配哪个键应该是对组的引用
  • 完美运行,在原版 js 中也是如此!不像谁结束了我已经回答的问题,指的是一个 8 岁的帖子,使用 jQuery 和下划线接受了答案,这与我的问题无关。无论如何,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 2019-05-29
  • 2021-04-21
  • 2022-01-18
  • 2019-12-28
  • 2021-05-20
相关资源
最近更新 更多