【问题标题】:How To Group Objects In Array By Unique Properties in Javascript?如何通过 Javascript 中的唯一属性对数组中的对象进行分组?
【发布时间】:2020-07-25 18:20:06
【问题描述】:

所以我的问题是我试图按“县”对我的联系人数组进行分组,我唯一的问题是我的分组功能有效......不是真的。如果你运行我的代码,你会看到它按预期分组;我唯一的问题是,佛罗里达州的华盛顿州和阿拉巴马州的华盛顿州是两个不同的县,不应归为一类。我知道我可以尝试在该县附加一条额外的信息,以使其独一无二,例如:Washington,FL & Washington,AL。这可能会解决问题,但需要我改变我的数据集或为状态代码编写另一个查找函数。

那么有没有一种方法可以简单地确保我的函数根据每个对象(如州)上的每个数据按唯一县分组?

感谢您的帮助。

function groupBy(array, key) {
  return array.reduce((r, a) => {
    ;(r[a[String(key)]] = r[a[String(key)]] || []).push(a)
    return r
  }, {})
}

const contacts = [
  {
    County: 'Washington',
    State: 'Florida',
    Country: 'United States',
    Name: 'Bob Michael',
  },
  {
    County: 'Washington',
    State: 'Alabama',
    Country: 'United States',
    Name: 'John Doe',
  },
]

console.log(groupBy(contacts, "County"))

【问题讨论】:

  • 您想要什么样的输出?一个对象不能有多个相同的键,因此不可能有两个 Washington
  • "{Washington,Florida: [{..},{..}], Washington,Alabama: [{..},{..}], ...} 这样的事情我会很好。稍后我仍然需要解析每个键以删除 State 字符串,但至少我不会卡住

标签: javascript arrays function grouping javascript-objects


【解决方案1】:

您可以获取一组键并将值连接到单个键。

function groupBy(array, keys) {
  return array.reduce((r, o) => {
    const key = keys.map(k => o[k]).join('|');
    (r[key] = r[key] || []).push(o);
    return r;
  }, {});
}

const contacts = [
  {
    County: 'Washington',
    State: 'Florida',
    Country: 'United States',
    Name: 'Bob Michael',
  },
  {
    County: 'Washington',
    State: 'Alabama',
    Country: 'United States',
    Name: 'John Doe',
  },
]

console.log(groupBy(contacts, ["Country", "State", "County"]))

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 2021-08-09
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多