如何将对象数组与数组进行比较?

时间:2019-10-29 20:56:42

标签: javascript arrays object

我有一个对象数组和一个字符串数组

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

userChoice = ['2','4']

我需要使用userChoice遍历城市,并通过ID查找城市名称。 我想这将是一个嵌套循环,但我为此感到困惑。

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

3 个答案:

答案 0 :(得分:2)

您可以使用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);

答案 1 :(得分:0)

您可以使用Map对象根据城市查询ID。

let cityMap = new Map(cities.map(c => [c.name, c.id]));
console.log(cityMap.get("Rome")); // --> "2"

答案 2 :(得分:0)

只需使用一个简单的地图,即可将数组元素从另一个数组映射到城市。如果您可以包含数组中可能不包含的值,但为简单起见,我可能会忽略它。

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)