zoukankan      html  css  js  c++  java
  • 数组内元素全都是数组,展开并合并

    有时候,在项目中,我们经常遇到一些无奈的数据结构,在某一有多个对象元素组成的数组当中,对象内也都有统一属性,类型为数组,然而在我们前台使用的时候,我们有需要将这些内部数组合并为同一个数组同时使用。

    列举一个数据结构:

    {
      "mainDevice": [
        {
          "id": 1100001,
          "deviceNo": "SDNO00001001",
          "additions": [{
            "additionId": 20000000001,
            "additionType": 1,
            "additionNo": "ADDNO1001",
            "effectiveTime": 1574326205000
          },{
            "additionId": 20000000013,
            "additionType": 2,
            "additionNo": "ADDNO1024",
            "effectiveTime": 1574326205000
          }]
        },
        {
          "id": 1100002,
          "deviceNo": "SDNO00001002",
          "additions": [{
            "additionId": 20000000002,
            "additionType": 2,
            "additionNo": "ADDNO1002",
            "effectiveTime": 1574326205000
          }]
        }
      ]
    }
    

      一辆车上可能存在多种类型的主设备,每一个主设备上又可能绑定多个不同类型的附加设备,这就导致我们获取的数据格式有可能是上述列举的格式。

      然而我们在前台展示的时候,可能是所有附加设备需要放在一起展示,这就需要我们把所有附加设备全部合并到同一个数组内部,那么怎么提取出所有附加设备呢?

      当然,最容易想到的方法:

    let additions = mainDevice.map(item => item.additions)
    

      这么依赖,结果必然是这么个格式: [[{}, {}], [{}]],有多少个主设备,最外层数组就会产生多少个数组元素,那么我们下一个需要做的就是:

      形象点来说,就是把最外层这个中括号去掉,然后把内部的所有数组,合并。

      在元素固定的情况下,我们可以一个元素一个元素的展开获取,如果所有数据个数都不确定呢?

      我能够想到的唯一的方法似乎就是函数的apply方法。

    apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数
    

      那么,在函数内部,将数组合并是否可行? 

            function arrExpand (){
              let initArr = []
              Array.from(arguments).forEach(item => {
                initArr = initArr.concat(item)
              })
              return initArr;
            }
    

      返回的结果就是把最外层的中括号去掉了,再想想,似乎直接把数组当做参数传递进入函数作为形参也没什么问题!

      

  • 相关阅读:
    树上后缀排序
    省选模拟赛day4
    吉司机线段树
    虚树复习
    bzoj 3065: 带插入区间K小值
    luogu P2462 [SDOI2007]游戏
    luogu P3783 [SDOI2017]天才黑客
    企业为取得交易性金融资产发生的交易费用应记入到投资收益科目
    旧手机数据迁移到新手机
    应收票据业务操作(背书、背书退回、退票)
  • 原文地址:https://www.cnblogs.com/zhuhuoxingguang/p/9999256.html
Copyright © 2011-2022 走看看