我有这一群人
personsList = [
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C', 'D']}
]
在cities
旁边的每个对象中有更多详细信息,但我想创建一个内部所有城市的数组 - 唯一。所以结果会是
['A', 'B', 'C', 'D']
我尝试过像
这样的事情const allCities = personsList.map(p => p.cities)
然后我得到了一个数组数组,这个数组的最佳方法是什么?感谢。
答案 0 :(得分:2)
您可以尝试使用Set
var personsList = [
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C', 'D']}
]
// cities will have all the cities with duplicates
const allCities = personsList.reduce((a,c) => [...a, ...c.cities], []);
// create set from array - removes duplicate and then create array back from set
console.log(Array.from(new Set(allCities)));

答案 1 :(得分:0)
您可以直接使用Set
获取唯一值。
var personsList = [{ cities: ['A', 'B', 'C'] }, { cities: ['A', 'B', 'C'] }, { cities: ['A', 'B', 'C'] }, { cities: ['A', 'B', 'C', 'D'] }],
unique = Array.from(
personsList.reduce(
(s, { cities }) => cities.reduce((t, c) => t.add(c), s),
new Set
)
);
console.log(unique);

答案 2 :(得分:0)
您可以array#map
所有城市,然后将它们连成一个数组。然后使用Set
,您就可以获得独特的城市。
const personsList = [ {cities: ['A', 'B', 'C']}, {cities: ['A', 'B', 'C']}, {cities: ['A', 'B', 'C']}, {cities: ['A', 'B', 'C', 'D']} ],
uniqueCity = Array.from(new Set([].concat(...personsList.map(({cities}) => cities))));
console.log(uniqueCity);

答案 3 :(得分:0)
我认为这是你正在寻找的效果,通过使用你自己保证只有独特的元素。
let personsList = [
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C']},
{cities: ['A', 'B', 'C', 'D']}
]
const allCities = personsList.reduce((acc,e) => {
e.cities.map(x=>{
acc.add(x)
})
return acc
}, new Set())
console.log(Array.from(allCities))
答案 4 :(得分:0)
const personsList = [
{ cities: ['A', 'B', 'C'] },
{ cities: ['A', 'B', 'C'] },
{ cities: ['A', 'B', 'C'] },
{ cities: ['A', 'B', 'C', 'D'] }
];
const allCities = [...new Set([].concat(...personsList.map(({ cities }) => cities)))];
console.log(allCities);