首页 > 解决方案 > Javascript数组数据过滤到对象数组

问题描述

我有一个像这样的数组:

ArrOfTime = ["Monday", "10:00-17:00", "Tuesday", "10:00-17:00", "17:00-21:00", "21:00-9:00", "Wednesday", "10:00-17:00", "17:00-21:00"]

我希望将格式更改为对象数组,例如:

ArrOfObj = [
  {"day": "Monday", "time": "10:00-17:00"},
  {"day": "Tuesday", "time": "10:00-17:00, 17:00-21:00, 21:00-9:00"},
  {"day": "Wednesday", "time": "10:00-17:00, 17:00-21:00},
]

但我尝试了一些方法来改变它失败了....

for (let i = 0; i < ArrOfTime.length; i += 2) {
  ArrOfObj.push({
    day: ArrOfTime[i],
    time: ArrOfTime[i + 1],
  });
}

如何编写我的代码才能成功更改ArrOfObj之类的格式?

标签: javascriptarrays

解决方案


ArrOfTime = ["Monday", "10:00-17:01", "Tuesday", "10:00-17:02", "17:00-21:03", "21:00-9:04", "Wednesday", "10:00-17:05", "17:00-21:06"]

const hasNumber = /\d/;

let newArr = []

let obj = {}

for (let i = 0; i < ArrOfTime.length; i++){
 if( !hasNumber.test(ArrOfTime[i]) ){
     obj.time = '';
     obj.day = ArrOfTime[i];
    newArr.push(obj)
    obj = {}
 }  else if ( newArr[newArr.length-1].time === '') { 
     newArr[newArr.length-1].time = ArrOfTime[i]
    } else { 
        newArr[newArr.length-1].time = newArr[newArr.length-1].time + `, ${ArrOfTime[i]}`
         }  
}

console.log('newArr', newArr)


推荐阅读