请教一个给数组添加元素的问题

现在有这样一个数组arr:
`[
{type: 1, day: 13, hours: 11, minutes: 21},
{type: 3, day: 33, hours: 14, minutes: 51},
{type: 5, day: 33, hours: 14, minutes: 51},
{type: 6, day: 33, hours: 14, minutes: 51}
]`
想实现这样的转换:
现在type缺少2和4,希望增加两项,变成下面的格式,就是已type的值为标准,从1开始,
前面缺少几个值,就增加几项空字符串
`[
{type: 1, day: 13, hours: 11, minutes: 21},
{type: '', day: '', hours: '', minutes: ''},
{type: 3, day: 33, hours: 14, minutes: 51},
{type: '', day: '', hours: '', minutes: ''},
{type: 5, day: 32, hours: 16, minutes: 21},
{type: 6, day: 31, hours: 44, minutes: 55}
]`
请问一下大家这种格式要怎么转化

阅读 1.6k
2 个回答
let t = [
 {type: 1, day: 13, hours: 11, minutes: 21},
 {type: 3, day: 33, hours: 14, minutes: 51},
 {type: 5, day: 33, hours: 14, minutes: 51},
 {type: 6, day: 33, hours: 14, minutes: 51}
];

// 补全方法函数
let complement = function (arr) {
 let res = [], lastType = 1;
 arr.forEach(obj => {
    let type = obj.type;
    while (type > lastType) {
        res.push({type: '', day: '', hours: ''});
        lastType++;
    }
    res.push(obj);
    lastType++;
 })
 return res;
}

// 测试打印
console.log(complement(t));

![上传中...]()

demo([
  {type: 1, day: 13, hours: 11, minutes: 21},
  {type: 4, day: 33, hours: 14, minutes: 51},
  {type: 6, day: 25, hours: 26, minutes: 14}
])

function demo (list) {
  if(list.length) {
    // 先排个序
    list.sort((a, b) => a.type - b.type)
    let preType = list[0].type, item;
    for(let index = 1; index < list.length; index++) {
      item = list[index]
      if(item.type - preType > 1) {
        preType++
        list.splice(index, 0, { type: '', day: '', hours: '', minutes: '' })
      } else {
        preType = item.type
      }
    }
  }
  return list;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题