2017-07-19 65 views
-1

我有這個計劃數組,我需要它變成這個輸出。有什麼線索?創建一個數組中有相同鍵的對象的新陣列

let schedules = [ 
{day: 'Sunday', time: '5:00 PM'}, 
{day: 'Monday', time: '4:00 PM'}, 
{day: 'Monday', time: '12:00 PM'}, 
{day: 'Tuesday', time: '1:00 PM'} 
] 

let output = [ 
{day: 'Sunday', time: '5:00 PM'}, 
[ 
    {day: 'Monday', time: '4:00 PM'}, 
    {day: 'Monday', time: '12:00 PM'} 
], 
{day: 'Tuesday', time: '1:00 PM'} 
] 

回答

1

你可先用reduce()創建一個對象,然後map()獲得值數組。

let schedules = [ 
 
{day: 'Sunday', time: '5:00 PM'}, 
 
{day: 'Monday', time: '4:00 PM'}, 
 
{day: 'Monday', time: '12:00 PM'}, 
 
{day: 'Tuesday', time: '1:00 PM'} 
 
] 
 

 
var obj = schedules.reduce(function(r, e) { 
 
    if (!r[e.day]) r[e.day] = e 
 
    else r[e.day] = Array.isArray(r[e.day]) ? r[e.day].concat(e) : [r[e.day]].concat(e) 
 
    return r; 
 
}, {}) 
 

 
var result = Object.keys(obj).map(e => obj[e]) 
 

 
console.log(result)

1

let schedules = [ 
 
{day: 'Sunday', time: '5:00 PM'}, 
 
{day: 'Monday', time: '4:00 PM'}, 
 
{day: 'Monday', time: '12:00 PM'}, 
 
{day: 'Tuesday', time: '1:00 PM'} 
 
]; 
 
var temp = {}; 
 
schedules.forEach(function(ob){ 
 
    temp[ob.day] = temp[ob.day] === undefined ? ob : Array.isArray(temp[ob.day]) ? temp[ob.day].concat([ob]) : [temp[ob.day]].concat([ob]); 
 
}) 
 
var output = Object.values(temp); 
 

 
console.log(output);

+0

謝謝大家的幫忙!但有沒有辦法讓星期一的數組而不是其他對象? – kyangy

+0

@kyangy我已更正我的代碼,現在檢查。 – Dij

0

您可以使用對象減少值

let schedules = [{ 
 
    day: 'Sunday', 
 
    time: '5:00 PM' 
 
    }, 
 
    { 
 
    day: 'Monday', 
 
    time: '4:00 PM' 
 
    }, 
 
    { 
 
    day: 'Monday', 
 
    time: '12:00 PM' 
 
    }, 
 
    { 
 
    day: 'Monday', 
 
    time: '3:00 PM' 
 
    }, 
 
    { 
 
    day: 'Tuesday', 
 
    time: '1:00 PM' 
 
    } 
 
] 
 

 

 
var value = schedules.reduce((acc, i) => { 
 
    if (!acc[i.day]) { 
 
    acc[i.day] = i 
 
    } else if (Array.isArray(acc[i.day])) { 
 
    acc[i.day].push(i); 
 
    } else if (typeof acc[i.day] === 'object') { 
 
    acc[i.day] = [acc[i.day]] 
 
    acc[i.day].push(i) 
 
    } 
 

 
    return acc 
 
}, {}) 
 

 
console.log(...Object.values(value))

+0

@kyangy我想你可能會更喜歡這個解決方案,它更簡單 – Rick

相關問題