@denis2601

Как отфильтровать массив обьектов?

Есть массив объектов:
let data = [
    {
        "ID": 671055,
        "JobTitle": "Project Manager",
        "City": "New York",
    },
    {
        "ID": 683759,
        "JobTitle": "Project Manager - Philadelphia",
        "City": "Philadelphia",
    },
    {
        "ID": 710323,
        "JobTitle": "Assistant Project Accountant",
        "City": "Philadelphia",
    },
    {
        "ID": 700730,
        "JobTitle": "Marketing Coordinator",
        "City": "New York",
    },
    {
        "ID": 698950,
        "JobTitle": "Project Accountant",
        "City": "New York",
    }
];


как получить новый отфильтрованный массив объектов:
let dataNew = {
    'New York': [
        {
            "ID": 671055,
            "JobTitle": "Project Manager",
            "City": "New York",
        },
        {
            "ID": 700730,
            "JobTitle": "Marketing Coordinator",
            "City": "New York",
        },
        {
            "ID": 698950,
            "JobTitle": "Project Accountant",
            "City": "New York",
        }
    ],
    'Philadelphia': [
        {
            "ID": 683759,
            "JobTitle": "Project Manager - Philadelphia",
            "City": "Philadelphia",
        },
        {
            "ID": 710323,
            "JobTitle": "Assistant Project Accountant",
            "City": "Philadelphia",
        }
    ]
};
  • Вопрос задан
  • 107 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
const dataNew = {};

data.forEach(
  (item) => dataNew[item.City] ? dataNew[item.City].push(item) : dataNew[item.City] = [item]
);


Есть ещё вариант с reduce, но он, имхо, гораздо менее читаемым получается.

P.S. Это не фильтрация, а группировка.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
data.reduce(
  (acc, cur) => (acc[cur.City] ??= [], acc[cur.City].push(cur), acc),
  {}
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы