繁体   English   中英

返回对象数组(来自对象数组)

[英]Return array of objects (from array of objects)

我有以下数据,并且我想返回不同years (对象)数组。

我尝试了以下功能,但在数组中获取了数组。

 const data = [{ id: 1, name: "test1", years: [{ id: 1, name: "year1" }, { id: 2, name: "year2" }] }, { id: 2, name: "test2", years: [{ id: 1, name: "year1" }] }, ] let years = data.map((s) => { return s.years }) let distinctYears = Array.from(new Set(years.map(c => c.id))).map(id => { return { id: id, name: years.find(c => c.id === id).name, } }) console.log(distinctYears); 

期望的结果:

[
  {id: 1, name: "year1"},
  {id: 2, name: "year2"}
]

由于s.years()是一个数组,并且data.map()返回结果的数组, years必然是一个数组的数组。

而不是使用.map() ,而使用.reduce()来连接它们。

 const data = [{ id: 1, name: "test1", years: [{ id: 1, name: "year1" }, { id: 2, name: "year2" }] }, { id: 2, name: "test2", years: [{ id: 1, name: "year1" }] }, ]; const years = data.reduce((a, { years }) => a.concat(years), []); let distinctYears = Array.from(new Set(years.map(c => c.id))).map(id => { return { id: id, name: years.find(c => c.id === id).name, } }); console.log(distinctYears); 

您可以通过多种方式进行此操作。 这是一个,不是一线,而是分解为多个部分,以帮助我们了解发生了什么。

您的数据集:

let data =
[
  {
    id: 1,
    name: "test1",
    years: [{id: 1, name: "year1"}, {id: 2, name: "year2"} ]
  },
  {
    id: 2,
    name: "test2",
    years: [{id: 1, name: "year1"} ]
  },
]

使用.flatMap()创建一个包含所有项目的一级数组:

let allItems = data.flatMap((item) => {
    return item.years.map((year) => {
        return year
    })
})

获取不同的项目:

let distinct = []

allItems.forEach((item) => {
    let matchingItem = distinct.find((match) => match.id == item.id && match.name == item.name)

    if(!matchingItem){
        distinct.push(item)
    }
})

在实践中:

 let data = [{ id: 1, name: "test1", years: [{ id: 1, name: "year1" }, { id: 2, name: "year2" }] }, { id: 2, name: "test2", years: [{ id: 1, name: "year1" }] }, ] let allItems = data.flatMap((item) => { return item.years.map((year) => { return year }) }) let distinct = [] allItems.forEach((item) => { let matchingItem = distinct.find((match) => match.id == item.id && match.name == item.name) if (!matchingItem) { distinct.push(item) } }) console.log(distinct) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM