前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记 | 一道使用js合并数组的题目

笔记 | 一道使用js合并数组的题目

作者头像
Zkeq
发布2022-12-15 14:17:38
7920
发布2022-12-15 14:17:38
举报
文章被收录于专栏:ZkeqZkeq

题目

有如下数组

代码语言:javascript
复制
[
    {
        code: 1,
        data: [
            { title: 'haha', size: 123 },
            { title: 'xixi', size: 456 }
        ]
    },
    {
        code: 2,
        data: [
            { title: 'cscs', size: 4344 },
            { title: 'vvv', size: 555 }
        ]
    }
]

要求整理成如下格式

代码语言:javascript
复制
[
  { 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,因为这种就是对数组就行累加zz

代码语言:javascript
复制
// 首先写成这样子
const result = data.reduce((acc, cur) => {
 
    return acc
    }
    , [])

接着我们拿到了数组第一层的每一项

代码语言:javascript
复制

        code: 1,
        data: [
            { title: 'haha', size: 123 },
            { title: 'xixi', size: 456 }
        ]
    }
// 即要求以上结构变成
  { code: 1, title: 'haha', size: 123 },
  { code: 1, title: 'xixi', size: 456 },

很容易想到使用 forEach 遍历即可

代码语言:javascript
复制
 cur.data.forEach(item => {
        acc.push({
          code: cur.code,
          ...item // 即展开数组(
        })
    })

即最终答案:

代码语言:javascript
复制
const result = data.reduce((acc, cur) => {
    cur.data.forEach(item => {
        acc.push({
          code: cur.code,
          ...item
        })
    })
    return acc
    }
    , [])

题解二

使用两次 map 外加一次 拍平

代码语言:javascript
复制
data.map(item => item.data.map(v =>({code: item.code, ...v}))).flat()

题解三

将题解一的 foreach + pushmap 代替

代码语言:javascript
复制
const result = data.reduce((acc, cur) => {
    return acc.concat(cur.data.map((item)=>{
      item.code = cur.code
      return item
    }))
    }
    , [])

题解四

优化题解三, 删掉 return

代码语言:javascript
复制
const result = data.reduce((acc, cur) => 
// 箭头函数不用 return 值 :D
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

    acc.concat(

        cur.data.map((item) => ({ // 多加一个括号,是为了把返回值当做一个参数返回
            ...item,
            code: cur.code
        })
        )

    )

    , [])

对得到的数组进行按 title 排序

代码语言:javascript
复制
result.sort((a, b) => a.title > b.title ? 1 : -1)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
    • 题解一
      • 题解二
      • 题解三
      • 题解四
      • 对得到的数组进行按 title 排序
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档