2017-07-19 19 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

相关问题