题目
有如下数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [ { code: 1, data: [ { title: 'haha', size: 123 }, { title: 'xixi', size: 456 } ] }, { code: 2, data: [ { title: 'cscs', size: 4344 }, { title: 'vvv', size: 555 } ] } ]
|
要求整理成如下格式
1 2 3 4 5 6
| [ { code: 1, title: 'haha', size: 123 }, { code: 1, title: 'xixi', size: 456 }, { code: 2, title: 'cscs', size: 4344 }, { code: 2, title: 'vvv', size: 555 } ]
|
题解一
思路:既然是数组,那么肯定要使用数组的一些方法
首先我想到的是使用 reduce
,因为这种就是对数组就行累加
1 2 3 4 5 6
| const result = data.reduce((acc, cur) => { return acc } , [])
|
接着我们拿到了数组第一层的每一项
1 2 3 4 5 6 7 8 9 10
| { code: 1, data: [ { title: 'haha', size: 123 }, { title: 'xixi', size: 456 } ] }
{ code: 1, title: 'haha', size: 123 }, { code: 1, title: 'xixi', size: 456 },
|
很容易想到使用 forEach
遍历即可
1 2 3 4 5 6
| cur.data.forEach(item => { acc.push({ code: cur.code, ...item }) })
|
即最终答案:
1 2 3 4 5 6 7 8 9 10
| const result = data.reduce((acc, cur) => { cur.data.forEach(item => { acc.push({ code: cur.code, ...item }) }) return acc } , [])
|
题解二
使用两次 map
外加一次 拍平
1
| data.map(item => item.data.map(v =>({code: item.code, ...v}))).flat()
|
题解三
将题解一的 foreach + push
用 map
代替
1 2 3 4 5 6 7
| const result = data.reduce((acc, cur) => { return acc.concat(cur.data.map((item)=>{ item.code = cur.code return item })) } , [])
|
题解四
优化题解三, 删掉 return
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const result = data.reduce((acc, cur) =>
acc.concat(
cur.data.map((item) => ({ ...item, code: cur.code }) )
)
, [])
|
对得到的数组进行按 title 排序
1
| result.sort((a, b) => a.title > b.title ? 1 : -1)
|
版权声明: 资料来源:饥人谷。任何组织或个人未经许可,禁止转载