0

请随意修改标题,我很难解释和搜索。

var booking = [
 {
    x: "1",
    y: "2",
    days: [
       {
           hours: 8
       },     
    ]
 },
 {...}
]

var hoursBooked = [8, 2, 4, 8, 2, 8, 3, 4]; // this is what I want

所以我有一系列“预订”对象。每个 Booking 可以在“Day”对象数组中包含天数。在“Day”对象中有一个“Hours”属性。

我想做的就是遍历 bookings 数组并输出一个扁平的“小时”值数组(这样我就可以在图表中可视化)。

我确信有一个很好的功能或其他干净的方法来做到这一点,而不是使用一系列“for”循环。

任何人?

4

3 回答 3

2

罗达什 4x

var booking = [
 {
    x: "1",
    y: "2",
    days: [
       {
           hours: 8
       },     
    ]
 },
 {
    x: "1",
    y: "2",
    days: [
       {
           hours: 3
       },  
       {
           hours: 5
       }   
    ]
 }
];


_(booking).map('days').flatten().map('hours').value();

将打印

[8, 3, 5]
于 2017-05-24T10:54:29.883 回答
1

您可以减少数组booking的值。days

var booking = [{ x: "1", y: "2", days: [{ hours: 8 }, { hours: 4 }, ] }, { x: "3", y: "4", days: [{ hours: 1 }, { hours: 3 }, ] }, { x: "3", y: "4", days: [] }],
    hoursBooked = booking.reduce((r, a) => r.concat((a.days || []).map(d => d.hours)), []);

console.log(hoursBooked);

于 2017-05-24T10:59:23.203 回答
0

var booking = [
 {
    x: "1",
    y: "2",
    days: [
       {
           hours: 8
       },     
       {
           hours: 2
       }
    ]
 },
 {
    x: "1",
    y: "2",
    days: [
       {
           hours: 4
       },     
    ]
 }
]
var hoursBooked = []
booking.forEach(b=>b.days.forEach(d=>hoursBooked.push(d.hours)))
console.log(hoursBooked)

于 2017-05-24T10:52:14.650 回答