鍍金池/ 問(wèn)答/HTML5  Java  HTML/ js改變數(shù)據(jù)結(jié)構(gòu)

js改變數(shù)據(jù)結(jié)構(gòu)

后臺(tái)給了我一個(gè)數(shù)據(jù)結(jié)構(gòu)作為表頭,我感覺(jué)不太好用,想修改一下格式。

  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"
};

這些不太好直接循環(huán)渲染到頁(yè)面上。我想大概修改成這樣的結(jié)構(gòu)好處理了

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

一開始的思路是獲取下滑杠前面一樣的做成一個(gè)對(duì)象最后放到數(shù)組里。但是每次打印發(fā)現(xiàn)都不是想象的那樣

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

為什么會(huì)這樣啊????難道是我的思路錯(cuò)了嗎

回答
編輯回答
憶當(dāng)年

代碼確實(shí)有點(diǎn)問(wèn)題,我寫了一個(gè)

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);
2017年3月3日 15:50
編輯回答
萌面人

能split的沒(méi)必要正則表達(dá)式,不要濫用.

2017年10月23日 15:07
編輯回答
青檸

謝謝各位大佬幫忙,希望以后我也能有機(jī)會(huì)幫助別人。

2017年9月1日 18:27
編輯回答
不二心
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')}]`)
2017年4月25日 19:02
編輯回答
小眼睛
 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'
    };

    
    // 如果是無(wú)序的,所以要先取得這個(gè)集合
    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);
    }
2017年10月25日 17:28
編輯回答
雨萌萌
var new_arr = [];
for (item in dateInfo) {
    var index = item.match(/(\d+)/)[1];
    var key = item.match(/_(\S*)/)[1];
    new_arr[index] = new_arr[index] ? new_arr[index] : {};
    new_arr[index][key] = dateInfo[item];
}
console.log(new_arr);
2018年1月31日 13:45