Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить свойства объекта (https://javascript.ru/forum/misc/83993-poluchit-svojjstva-obekta.html)

NovichokJS 09.05.2022 13:27

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

На выходе нужно получить:

{ 'Kyiv': 2, 'Lviv': 2, 'Odesa':}

Код:

function usersCountByCity(users) {
let object = {};
let count = 0;

  for (const i in users) {
object = [users[i].city, count];
count++;

  }
     return object;
}

// examples
const users = [
  {
    id: 888,
    name: 'Denis',
    age: 44,
    city: 'Kyiv',
  },
  {
    id: 333,
    name: 'Alex',
    age: 33,
    city: 'Lviv',
  },
  {
    id: 392,
    name: 'Nastya',
    age: 22,
    city: 'Kyiv',
  },
  {
    id: 123,
    name: 'Violetta',
    age: 15,
    city: 'Odesa',
  },
  {
    id: 640,
    name: 'Mykola',
    age: 31,
    city: 'Lviv',
  },
];

console.log(usersCountByCity(users));

рони 09.05.2022 13:36

NovichokJS,
function usersCountByCity(users) {
            let object = {};
            for (const {
                    city
                } of users) {
                object[city] ??= 0;
                object[city] += 1;

            }
            return object;
        }

NovichokJS 09.05.2022 13:41

object[city] ??= 0;
^

SyntaxError: Unexpected token ?
at Module._compile (internal/modules/cjs/loader.js:723:23)

рони 09.05.2022 13:49

NovichokJS,
function usersCountByCity(users) {
            let object = {};
            for (const {
                    city
                } of users) {
                object[city] = (object[city]||0) + 1;
            }
            return object;
        }

NovichokJS 09.05.2022 13:53

круто, спасибо! а объясните пожалуйста, а то не понятен контекст.

NovichokJS 09.05.2022 13:57

не пойму это выражения:
(object[city] || 0) + 1;

рони 09.05.2022 13:58

NovichokJS,
что объяснять: цикл по всем элементам массива, из элемента извлекли название города, посмотрели есть ли в объекте свойство с таким названием, если нет, создали свойство и присвоили нуль, увеличили значение свойства на 1, вернули объект.

рони 09.05.2022 14:00

Цитата:

Сообщение от NovichokJS
(object[city] || 0) + 1;

если есть значение в object[city] используем его, иначе берём нуль для расчёта.

NovichokJS 09.05.2022 14:00

понял теперь, благодарю.

рони 09.05.2022 14:04

NovichokJS,
тоже самое
function usersCountByCity(users) {
            let object = {};
            for (const {
                    city
                } of users) {
                if(city in object) object[city] += 1;
                else object[city] = 1;
            }
            return object;
        }


все три предложенных кода выше, одно и тоже.


Часовой пояс GMT +3, время: 02:47.