js 常见业务数据数组转换操作 时间复杂度降级O(n)的尝试

  1. 提取外层关键数据(如果需要),将双层数组扁平化为单层
  2. 单层再做转换,很容易得到O(n)的实现
const infos = [
    {
        time: '2022-02-21',
        data: [{
            Duration: 22,
            Spec: "h264"
        },
        {
            Duration: 33,
            Spec: "h265_hd"
        },
        {
            Duration: 44,
            Spec: "h264_4k"
        }]
    },
    {
        time: '2022-02-22',
        data: [{
            Duration: 55,
            Spec: "h264"
        },
        {
            Duration: 66,
            Spec: "h265_hd"
        },
        {
            Duration: 77,
            Spec: "h264_4k"
        }]
    }
]

const _map = list => list
    .reduce((prev, cur) => prev.data.concat(cur.data))
    .reduce((total, { Duration, Spec }) => Object.assign(total, { [Spec]: (total[Spec] || []).concat(Duration) }), {})

const _list = map => Object.entries(map).map(([name, data]) => ({ name, data }))

_list(_map(infos))

posted @   IslandZzzz  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2020-02-23 ES5 寄生式继承
2020-02-23 JavaScript ES5类 原型 原型链 组合、原型、寄生式继承
2019-02-23 SpringMVC架构&组件&执行流程
点击右上角即可分享
微信分享提示