鍍金池/ 問(wèn)答/Java  HTML/ 遍歷JSON數(shù)據(jù),數(shù)據(jù)格式特殊怎么處理?

遍歷JSON數(shù)據(jù),數(shù)據(jù)格式特殊怎么處理?

后端返回一組數(shù)據(jù),其中有一項(xiàng)是這樣的:

 "oneWeekAll": "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};"
 

我要如何轉(zhuǎn)成正常的數(shù)組以方便循環(huán)遍歷呢?
這里面每個(gè)大括號(hào)都是用分號(hào)間隔的,并且一整串在一個(gè)雙引號(hào)內(nèi),搞得我有點(diǎn)亂套。求助大神,謝謝

附上后臺(tái)返回的全部數(shù)據(jù):

AuditRetCode:"1"
AuditRetVal:"success"
RetCode:"1"
RetVal:"1"
oneWeekAll:"{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};"

我要的東西在 oneWeekAll 里

回答
編輯回答
呆萌傻

split(";")

2018年1月23日 13:27
編輯回答
假灑脫

要簡(jiǎn)單點(diǎn)的話,就這樣:

const oneWeekAll = "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";

const result = oneWeekAll.split(';').filter(item => item).map(item => {
  const str = item.replace(/\{|\}/g, '')
  const arr = str.split(/\:|\,/)
  return {
    weekStart: arr[1],
    weekEnd: arr[3]
  }
});

console.log(result);

2018年5月4日 04:41
編輯回答
壞脾滊

謝邀, @Ash_Shen 的回答滿分,我稍稍改了一下(沒(méi)啥實(shí)際意義,也不知道性能如何)

const all = "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";

const list = all.split(";")
    .filter(t => t)
    .map(t => t.split(/[{},:]/))
    .map(parts => ({
        [parts[1]]: parts[2],
        [parts[3]]: parts[4]
    }));

然后還寫(xiě)了一個(gè)比較搞笑的版本(性能肯定不怎么樣)

const all = "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";

const json = all
    .replace(/;?$/, "")
    .replace(/,/g, "\",\"")
    .replace(/:/g, "\":\"")
    .replace(/;/g, ",")
    .replace(/\{/g, "{\"")
    .replace(/\}/g, "\"}");

const list = JSON.parse(`[${json}]`);

補(bǔ)充一下,上面最后一種肯定是很慢的,不過(guò)在 jsPerf 上測(cè)試第1種比 @Ash_Shen 的答案慢 35% 左右,嘗試把兩個(gè) map 合并成一個(gè) map,作用不大,但是改了一個(gè)對(duì)象的 key,速度一下子就起來(lái)了,居然提升了 150% (也就是2.5倍)

const list = all.split(";")
    .filter(t => t)
    .map(t => {
        const parts = t.split(/[{},:]/);
        return {
            weekStart: parts[2],
            weekEnd: parts[4]
        };
    });
2018年2月23日 14:00
編輯回答
短嘆
var arr = res.oneWeekAll.split(";") //這樣就把這串字符 分割成了以;為斷點(diǎn)的數(shù)組
2018年2月9日 10:05