2017-09-18 40 views
1

我有OBJ文件的列表:Angularjs 1:數據排序由

[{ 
    name: one, 
    date: 2017-09-18 
}, { 
    name: two, 
    date: 2017-09-11 
}, { 
    name: three, 
    date: 2017-09-13 
}] 

,我想通過每週排序。 也許喜歡:

{ 
1week(or , maybe better key like start of week): [{ 
     name: two, 
     date: 2017-09-11 
    }, { 
     name: three, 
     date: 2017-09-13 
    ], 
2week: [{ 
     name: one, 
     date: 2017-09-18 
    }] 
} 

我怎麼能由什麼星期日期屬於確定? 我該怎麼做才能做得更好?

+1

你應該看momentjs。 https://momentjs.com/docs/#/get-set/week/ 首先找出星期編號,然後排序。 – Thusitha

+0

你的「objs列表」無效。此外,你似乎仍然不確定你想要什麼輸出(也是無效的)。如果您可以驗證JavaScript並確認所需的輸出是什麼,那麼它會提供更好的問題(和答案)。 –

回答

1

我這個打過來,我認爲這是類似於你需要的東西:

https://jsfiddle.net/pegla/ytmayemr/

代碼:

let arrayOfDates = [{ 
    name: 'one', 
    date: '2017-09-18' 
}, { 
    name: 'two', 
    date: '2017-09-11' 
}, { 
    name: 'three', 
    date: '2017-09-13' 
}]; 

function getWeekNumber(d) { 
    // Copy date so don't modify original 
    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())); 
    // Set to nearest Thursday: current date + 4 - current day number 
    // Make Sunday's day number 7 
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7)); 
    // Get first day of year 
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1)); 
    // Calculate full weeks to nearest Thursday 
    var weekNo = Math.ceil((((d - yearStart)/86400000) + 1)/7); 
    // Return array of year and week number 
    return [d.getUTCFullYear(), weekNo]; 
} 

let newArrayOfDatesByWeek = arrayOfDates.reduce((prevVal, currVal, index)=>{ 
    let week = `week ${getWeekNumber(new Date(currVal.date))[1]} of ${getWeekNumber(new Date(currVal.date))[0]}`; 
    if(!(week in prevVal)) { 
    prevVal[week] = []; 
    } 
    prevVal[week].push(currVal); 
    return prevVal; 
}, []); 

console.log(newArrayOfDatesByWeek); 

getWeekNumber功能從這個答案由RobG拍攝,所以感謝那: Get week of year in JavaScript like in PHP