Как сгруппировать объекты в массиве по уникальным свойствам в Javascript? - PullRequest
1 голос
/ 13 апреля 2020

Итак, моя проблема в том, что я пытаюсь сгруппировать массив контактов по «округу». Моя единственная проблема в том, что моя функция группировки работает ... не совсем. Если вы запустите мой код, вы увидите, что он группируется, как и ожидалось; Моя единственная проблема в том, что Вашингтон, Флорида и Вашингтон, штат Алабама, - это два разных округа, которые не следует объединять. Я знаю, что могу попытаться добавить дополнительную информацию в округе, чтобы сделать ее уникальной, например: 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"))

1 Ответ

2 голосов
/ 13 апреля 2020

Вы можете взять группу ключей и объединить значения в одну клавишу.

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"]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...