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"
                  }
              ]
          },
]

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

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));