鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ js轉(zhuǎn)化數(shù)據(jù)結(jié)構(gòu)

js轉(zhuǎn)化數(shù)據(jù)結(jié)構(gòu)

做一個(gè)時(shí)間段的頁面,一節(jié)課30分鐘。后端想要的數(shù)據(jù)結(jié)構(gòu)是這樣的

2018-09-17|09:00-09:30,2018-09-18|09:30-11:00,2018-09-19|10:00-11:30,2018-09-20|10:30-11:00,2018-09-21|11:00-11:30,2018-09-22|11:30-12:00

我首先做成了這樣的數(shù)據(jù)結(jié)構(gòu)

setArray = [
    data:2018-09-17,
    ranges:[
        ["09:00", "09:30"],
        ["09:30", "10:00"],
        ["10:30","11:30"],
        ["11:30","12:00"]
    ],
    data:2018-09-18,
    ranges:[
        ["09:00", "09:30"],
        ["09:30", "10:00"],
        ["10:30","11:30"],
        ["11:30","12:00"]
    ], 
]
var getJson =  setArray.map(d => {
                return d.date + '|' + d.ranges.map(r => r.join('-')).join('|')
            }).join(',')

通過上面的方法也成功轉(zhuǎn)化成后端想要的結(jié)構(gòu)了。但是后端說,如果幾節(jié)課屬于連續(xù)一塊的,就合成一個(gè)數(shù)組開始結(jié)束時(shí)間就行了就好比上面寫的

ranges:[
    ["09:00", "09:30"],
    ["09:30", "10:00"],
    ["10:30","11:30"],
    ["11:30","12:00"]
]
需要改成
ranges:[
    ["09:00", "10:00"],
     ["10:00", "12:00"],
]

求幫一下忙

回答
編輯回答
安淺陌

類似要求的好像社區(qū)已經(jīng)有多個(gè)類似的帖子啦,討論的比較充分,可以參考一下。你用 “時(shí)間段” 在社區(qū)搜索。

2017年7月13日 19:21
編輯回答
遺莣

s = [];
for(let e of ranges){
    let v= s.pop();
    if(v&&v[1] == e[0]){
        s.push([v[0],e[1]]);
    }else{
        s.push(v,e)
    }
}
s.shift();//移除undefined
2018年9月18日 18:27
編輯回答
單眼皮
var getJson =  setArray.map(d => {
    var a = [],old = ''
    d.ranges.forEach(item=>{
        if(item[0] == old){
            a[ a.length - 1 ][1] = item[1]
        }else{
            a.push( item )
        }
        old = item[1]
    })
    return d.date + '|' + a.map(r => r.join('-')).join('|')
}).join(',')
2017年2月12日 08:53