簡體   English   中英

創建一個新的對象數組,該對象數組中具有相同的鍵

[英]Create a new array of objects that have the same key within an array

我有這個Schedules數組,我需要將其轉換為此輸出。 有任何線索嗎?

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'}
]

 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); 

您可以先使用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) 

您可以使用帶有對象的減少值

 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)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM