NodeJS Итерация по городу в JSON, возврат городов и пользователей в каждом городе - PullRequest
1 голос
/ 14 марта 2019

У меня есть приведенный ниже фрагмент из JSON-объекта, в котором содержится 3500 записей.

[
    {
      "use:firstName": "Bob",
      "use:lastName": "Smith",
      "use:categoryId": 36,
      "use:company": "BobSmith",
      "use:webExId": "Bob.Smith@email.com",
      "use:address": {
        "com:addressType": "PERSONAL",
        "com:city": "US-TX",
        "com:country": 1
      }
    },
    {
      "use:firstName": "Jane",
      "use:lastName": "Doe",
      "use:categoryId": 36,
      "use:webExId": "Jane.Doe@email.com",
      "use:address": {
        "com:addressType": "PERSONAL",
        "com:city": "US-CA",
        "com:country": "1_1"
      }
    }
    {
        "use:firstName": "Sam",
        "use:lastName": "Sneed",
        "use:categoryId": 36,
        "use:webExId": "Sam.Sneed@email.com",
        "use:address": {
          "com:addressType": "PERSONAL",
          "com:city": "US-CA",
          "com:country": "1_1"
        }
      }
]

Я использую NodeJS, и я застрял в поиске лучшего способа: 1. Перейдите через ['use:address']['com:city', чтобы наметить и идентифицировать все города. (В приведенном выше примере у меня есть две: US-TX и US-CA в трех предоставленных записях) 2. Затем определите, сколько записей соответствует каждому городу (в приведенном выше примере у меня будет US-TX : 1 и US-CA : 2)

Единственный код, который у меня есть, - это простая часть, которая выполняет forEach цикл по данным JSON, определяя переменную userCity (чтобы мне было проще), а затем ведя журнал для получения результатов (что на самом деле не нужно) но я сделал это, чтобы убедиться, что я правильно перебираю JSON).

function test() {
    const webexSiteUserListJson = fs.readFileSync('./src/db/webexSiteUserDetail.json');
    const webexSiteUsers = JSON.parse(webexSiteUserListJson);
    webexSiteUsers.forEach((userDetails) => {
        let userCity = userDetails['use:address']['com:city'];
        console.log(userCity);
    })
};

Я бесконечно искал помощи по этой теме и, возможно, неправильно сформулировал свой вопрос. Мы ценим любые предложения о том, как: 1. Выполните итерацию по ['use:address']['com:city', чтобы наметить и идентифицировать все города. 2. Затем определите, сколько записей соответствует каждому городу (в приведенном выше примере у меня будет US-TX : 1 и US-CA : 2)

Спасибо!

1 Ответ

1 голос
/ 14 марта 2019

Вы можете уменьшить массив webexSiteUsers до объекта с ключом по городу, где каждое значение - это число случаев, когда город встречается.Должно работать что-то похожее на приведенное ниже.

const counts = webexSiteUsers.reduce((countMemo, userDetails) => {
  let userCity = userDetails['use:address']['com:city'];
  if (countMemo[userCity]) {
    countMemo[userCity] = countMemo[userCity] + 1;
  } else {
    countMemo[userCity] = 1;
  }
  return countMemo;
}, {});

counts будет тогда объектом, который выглядит следующим образом.

{
  "US-TX": 1,
  "US-CA": 2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...