js改变数据结构

后台给了我一个数据结构作为表头,我感觉不太好用,想修改一下格式。

  var dateInfo = {
  week1_end: "2018-09-09",
  week1_start: "2018-09-03",
  week2_end: "2018-09-16",
  week2_start: "2018-09-10",
  week3_end: "2018-09-23",
  week3_start: "2018-09-17",
  week4_end: "2018-09-30",
  week4_start: "2018-09-24",
  week5_end: "2018-10-07",
  week5_start: "2018-10-01"
};

这些不太好直接循环渲染到页面上。我想大概修改成这样的结构好处理了

dateInfo = [
   {week1_start:"2018-09-03",week1_end:"week1_end"},
   {week2_start:"2018-09-03",week2_end:"week1_end"} ]

一开始的思路是获取下滑杠前面一样的做成一个对象最后放到数组里。但是每次打印发现都不是想象的那样

var new_arr = []
for(item in dateInfo){
   // console.log(item)
  var str1 = item.match(/(\S*)_/)[1];

  if (item.includes(str1)) {
    var obj = {
      item : dateInfo[item]
    }
  }
  new_arr.push(obj)
}

为什么会这样啊????难道是我的思路错了吗

阅读 3.8k
5 个回答

代码确实有点问题,我写了一个

const temp = {};
for (item in dateInfo) {
    const val = dateInfo[item]
    const str1 = item.match(/(\S*)_/)[1];
    if (!temp[str1]) {
        temp[str1] = {};
        temp[str1][item] = val;
    } else {
        temp[str1][item] = val
    }
}

const new_arr = Object.values(temp);

console.log(new_arr);

能split的没必要正则表达式,不要滥用.

 const dateInfo = {
      week1_end: '2018-09-09',
      week1_start: '2018-09-03',
      week2_end: '2018-09-16',
      week2_start: '2018-09-10',
      week3_end: '2018-09-23',
      week3_start: '2018-09-17',
      week4_end: '2018-09-30',
      week4_start: '2018-09-24',
      week5_end: '2018-10-07',
      week5_start: '2018-10-01'
    };

    
    // 如果是无序的,所以要先取得这个集合
    const cKeys = new Set();
    Object.keys(dateInfo).forEach(value => {
      const cKey = value.match(/(\S*)_/)[1];
      cKeys.add(cKey);
    });


    const newArray = [];
    for (const cKey of Array.from(cKeys)) {
      const obj = {};
      for (const key in dateInfo) {
        if (!dateInfo.hasOwnProperty(key)) {
          continue;
        }
        if (key.startsWith(cKey)) {
          obj[key] = dateInfo[key];
        }
      }
      newArray.push(obj);
    }

谢谢各位大佬帮忙,希望以后我也能有机会帮助别人。

let dateInfo = {
  week1_end: "2018-09-09",
  week1_start: "2018-09-03",
  week2_end: "2018-09-16",
  week2_start: "2018-09-10",
  week3_end: "2018-09-23",
  week3_start: "2018-09-17",
  week4_end: "2018-09-30",
  week4_start: "2018-09-24",
  week5_end: "2018-10-07",
  week5_start: "2018-10-01"
}
dateInfo = JSON.parse(`[${JSON.stringify(dateInfo).replace(/,("week[^1]_end)/g, '},{$1')}]`)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题