Как сравнить массив объектов с массивом? - PullRequest
2 голосов
/ 29 октября 2019

У меня есть массив объектов и массив строк

cities = [ { id: '1', name: 'Paris'}, { id: '2', name: 'Rome'}, { id: '3', name: 'London'}, { id: '4', name: 'Barcelona'}]

userChoice = ['2','4']

Мне нужно перебрать города с помощью userChoice и найти название города по идентификатору. Я предполагаю, что это будет вложенный цикл, но я борюсь с ним.

cities.filter(city=> userChoice.forEach(choice => choice == city.id))

Ответы [ 3 ]

2 голосов
/ 30 октября 2019

Вы можете использовать filter () и includes () для фильтрации cities массива путем проверки наличия id города в массиве userChoice.

Чтобы получить только имена, вы можете использовать map () для преобразования результата.

let cities = [ { id: '1', name: 'Paris'}, { id: '2', name: 'Rome'}, { id: '3', name: 'London'}, { id: '4', name: 'Barcelona'}];
let userChoice = ['2','4'];

let filteredCities = cities.filter(city => userChoice.includes(city.id));

let names = filteredCities.map(city => city.name);

console.log(names);
0 голосов
/ 30 октября 2019

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

const cities = [ { id: '1', name: 'Paris'}, { id: '2', name: 'Rome'}, { id: '3', name: 'London'}, { id: '4', name: 'Barcelona'}];

const userChoice = ['2','4'];

const userCities  = userChoice.map(val => cities.find(c => c.id === val).name);

console.log(userCities)
0 голосов
/ 30 октября 2019

Вы можете использовать объект Карта для поиска идентификатора в зависимости от города.

let cityMap = new Map(cities.map(c => [c.name, c.id]));
console.log(cityMap.get("Rome")); // --> "2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...