2017-09-18 5 views
1

によってソート日付私はOBJSのリストがあります: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

関連する問題