candy_tadecheng 2022-03-31 11:49 采纳率: 50%
浏览 54
已结题

js 数组合并去重、补齐空缺位


var arr1 = ["03-26", "03-27", "03-28","03-29"]
var arr2 = [
{
              "type": "6",
              "name": "哈哈哈",
              "date": [
                  {
                      "time": "03-27",
                      "num": "5"
                  },
                  {
                      "time": "03-28",
                      "num": "13"
                  },
              ]
          },
          {
              "type": "1",
              "name": "嘻嘻嘻",
              "date": [
                  {
                      "time": "03-27",
                      "num": "1"
                  },
              ]
          },
]
有两个数组arr1和arr2,我想把arr2变成这样
arr2 =  [
{
              "type": "6",
              "name": "哈哈哈",
              "date": [
                 {
                      "time": "03-26",
                      "num": "0"
                  },
                  {
                      "time": "03-27",
                      "num": "5"
                  },
                  {
                      "time": "03-28",
                      "num": "13"
                  },
                  {
                      "time": "03-29",
                      "num": "0"
                  }
              ]
          },
          {
              "type": "1",
              "name": "嘻嘻嘻",
              "date": [
                  {
                      "time": "03-26",
                      "num": "0"
                  },
                  {
                      "time": "03-27",
                      "num": "1"
                  },
              {
                      "time": "03-28",
                      "num": "0"
                  },
                  {
                      "time": "03-29",
                      "num": "0"
                  }
              ]
          },
]
  • 写回答

1条回答 默认 最新

  • 林一怂儿 前端领域新星创作者 2022-03-31 13:13
    关注

    不知道这样符合不符合你的需求~

    var arr1 = ["03-26", "03-27", "03-28", "03-29"]
    var arr2 = [
      {
        "type": "6",
        "name": "哈哈哈",
        "date": [
          {
            "time": "03-27",
            "num": "5"
          },
          {
            "time": "03-28",
            "num": "13"
          },
        ]
      },
      {
        "type": "1",
        "name": "嘻嘻嘻",
        "date": [
          {
            "time": "03-27",
            "num": "1"
          },
        ]
      },
    ]
    // 有两个数组arr1和arr2,我想把arr2变成这样
    let arr3 = [
      {
        "type": "6",
        "name": "哈哈哈",
        "date": [
          {
            "time": "03-26",
            "num": "0"
          },
          {
            "time": "03-27",
            "num": "5"
          },
          {
            "time": "03-28",
            "num": "13"
          },
          {
            "time": "03-29",
            "num": "0"
          }
        ]
      },
      {
        "type": "1",
        "name": "嘻嘻嘻",
        "date": [
          {
            "time": "03-26",
            "num": "0"
          },
          {
            "time": "03-27",
            "num": "1"
          },
          {
            "time": "03-28",
            "num": "0"
          },
          {
            "time": "03-29",
            "num": "0"
          }
        ]
      },
    ]
    
    // 根据上述内容新建合并方法
    /**
     * 合并数组
     * @param {string[]} t1 代表第一种类型的数组
     * @param {{
     *  type:string,
     *  name:string,
     *  date:{
     *   time:string,
     *   num:string
     *  }[]
     * }[]} t2 代表第二种类型的数组
     */
    function mergeArray(t1, t2) {
      for (let i = 0; i < t2.length; i++) {
        for (let j = 0; j < t1.length; j++) {
          // 如果不存在的话,塞入数组中
          if (!t2[i].date.find(a => a.time == t1[j])) t2[i].date.push({ time: t1[j], num: "0" })
        }
        // 做一个简单的排序
        t2[i].date.sort((a, b) => a.time.replace(/-/, '') - b.time.replace(/-/, ''));
      }
      return t2;
    }
    // 测试
    console.log(JSON.stringify(mergeArray(arr1, arr2)) == JSON.stringify(arr3));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)