将特定对象值从数组合并到分离的数组中

时间:2018-05-23 07:09:51

标签: javascript

我有这一群人

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)

然后我得到了一个数组数组,这个数组的最佳方法是什么?感谢。

5 个答案:

答案 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);