基于子数组javascript重写数组 [英] Rewrite array based on child array javascript
本文介绍了基于子数组javascript重写数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数组,如
{
"campaigns": [{
"name": "1st Campaign",
"books": [{
"title": "1st book",
"primary_isbn": "isbn1"
},
{
"title": "2nd book",
"primary_isbn": "isbn2"
},
{
"title": "3rd book",
"primary_isbn": "isbn3"
}
]
},
{
"name": "2nd cam",
"books": [{
"title": "4th book",
"primary_isbn": "isbn4"
},
{
"title": "5th book",
"primary_isbn": "isbn5"
}
]
}
]
}
从上面的数组中,我需要创建一个新数组,其中每个广告系列(父级)数据都转换为每本书的项目数。因此对于第一个项目
第一个广告系列应转换为3个项目,因为有3本书。所以我的新数组应该是
From above array i need to create new array where each campaign (parent) data converted to number of items per book. So for first item 1st campaign should be converted to 3 items as there are 3 books. so my new array should be
{
"campaigns": [{
"name": "1st campaign"
"title": "1st book",
"primary_isbn": "isbn1"
},
{
"name": "1st campaign"
"title": "2nd book",
"primary_isbn": "isbn2"
},
{
"name": "1st campaign"
"title": "3rd book",
"primary_isbn": "isbn3"
},
...
]
}
与第二次广告系列的结构相同。
我不确定如何解决这个问题
And same structure for 2nd campaign. I am not sure how to approach this problem
我尝试过使用lodash
I tried this using lodash
_.flattenDeep(data.campaigns.books)
推荐答案
You could use flatMap
and map
like this:
const input = {campaigns:[{name:"1st Campaign",books:[{title:"1st book",primary_isbn:"isbn1"},{title:"2nd book",primary_isbn:"isbn2"},{title:"3rd book",primary_isbn:"isbn3"}]},{name:"2nd cam",books:[{title:"4th book",primary_isbn:"isbn4"},{title:"5th book",primary_isbn:"isbn5"}]}]};
const campaigns =
input.campaigns.flatMap(({ name, books }) => books.map(b => ({ ...b, name })))
console.log({ campaigns })
这篇关于基于子数组javascript重写数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文