2017-05-25 5 views
0

Hallo Leute, ich bin schwer zu verstehen, wie kann ich etwas lösen.Unterstreichen Sie jedes und erweitern

Ich habe 7 Daten, die ich für jedes Datum sechs verschiedene Wert der Zeitschlitznummer hinzufügen muss, müssen die Ergebnisse aussehen.

{ 
"dateTime": "2017-05-25T09:20:58.846Z", 
    "timeSlotArray": 
     { 
     "available": true, 
     "placeAfter": "string", 
     "placeBefore": "string", 
     "slotNumber": 0 
     } 
} 

{ 
"dateTime": "2017-05-25T09:20:58.846Z", 
    "timeSlotArray": 
     { 
     "available": true, 
     "placeAfter": "string", 
     "placeBefore": "string", 
     "slotNumber": 1 
     } 
} 
{ 
"dateTime": "2017-05-25T09:20:58.846Z", 
    "timeSlotArray": 
     { 
     "available": true, 
     "placeAfter": "string", 
     "placeBefore": "string", 
     "slotNumber": 2 
     } 
} 

{ 
"dateTime": "2017-05-25T09:20:58.846Z", 
    "timeSlotArray": 
     { 
     "available": true, 
     "placeAfter": "string", 
     "placeBefore": "string", 
     "slotNumber": 3 
     } 
} 

{ 
"dateTime": "2017-05-25T09:20:58.846Z", 
    "timeSlotArray": 
     { 
     "available": true, 
     "placeAfter": "string", 
     "placeBefore": "string", 
     "slotNumber": 4 
     } 
} 

{ 
"dateTime": "2017-05-25T09:20:58.846Z", 
    "timeSlotArray": 
     { 
     "available": true, 
     "placeAfter": "string", 
     "placeBefore": "string", 
     "slotNumber": 5 
     } 
} 

aber ich bin andernfalls jeweils Zahlen Slotnummer

var startDate = new Date() 
 
var endDate = new Date(startDate.getTime() + 7 * 24 * 60 * 60 * 1000); 
 

 
var date = new Array() 
 

 
for (var iDate = new Date(); iDate < endDate; iDate.setDate(iDate.getDate() + 1)) { 
 
    date.push(iDate) 
 
} 
 

 
var numbers = [0, 1, 2, 3, 4, 5] 
 

 
addDateData = function(x) { 
 
    return { 
 
    date: x, 
 
    timeSlot: {} 
 
    } 
 
} 
 

 
addTimeSlot = function(x) { 
 
    _.each(numbers, function(y) { 
 
    _.extend(x.timeSlot, { 
 
     available: true, 
 
     placeAfter: "", 
 
     placeBefore: "", 
 
     slotNumber: y 
 
    }) 
 
    }) 
 
} 
 

 
var data = _.chain(date) 
 
    .map(addDateData) 
 
    .each(addTimeSlot) 
 
    .value() 
 
    
 
console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

jemand hinzufügen kann mir helfen, zu verstehen, was ich falsch mache?

+0

Das erwartete Ergebnis ist für mich unklar ... Sollte das Ergebnis eine Reihe von „Tagen“, wo jeder „Tag“ eine Reihe von Zeitfenstern hat: '[{Tag:" 2017-05 -25 ", Zeitfenster: [0,1,2, ...]}, {tag:" 2017-05-26 ", Zeitfenster: [0,1,2, ...]}]'? Oder ein Array von (Tagen * Zeitfenstern) "Tagen", wobei jeder Tag einen Zeitschlitz hat: '[{Tag:" 2017-05-25 ", Zeitfenster: [0]}, {Tag:" 2017-05-25 ", Zeitfenster: [1]}, {Tag: "2017-05-26", Zeitfenster: [0]}, {Tag: "2017-05-26", Zeitfenster: [1]}] '? – Andreas

+0

hallo andreas danke, dass du dir Zeit genommen hast, auf meine Frage zu antworten. Ich aktualisierte die gewünschte Ausgabe in meiner Frage, dieses Ergebnis ist das eine Datum, sollte für alle sieben Daten identisch sein. – PrinceZee

Antwort

1

Ich bin immer noch nicht so "zufrieden" mit dem erwarteten Ergebnis, aber ich werde es versuchen.

Dadurch werden die Tage nacheinander im selben Array ohne Trennung hinzugefügt.

[ 
    { day: 1, timeSlot: 0 }, 
    { day: 1, timeSlot: 1 }, 
    { day: 2, timeSlot: 0 }, 
    { day: 2, timeSlot: 1 }, 
    //... 
] 

var startDate = new Date(), 
 
    endDate = new Date(startDate.getTime() + 7 * 24 * 60 * 60 * 1000), 
 
    numbers = [0, 1, 2, 3, 4, 5], 
 
    date = []; 
 

 
for (var iDate = new Date(); iDate < endDate; iDate.setDate(iDate.getDate() + 1)) { 
 
    numbers.forEach(function(n) { 
 
    date.push({ 
 
     date: new Date(iDate), 
 
     timeSlot: { 
 
     available: true, 
 
     placeAfter: "string", 
 
     placeBefore: "string", 
 
     slotNumber: n 
 
     } 
 
    }); 
 
    }); 
 
} 
 

 
console.log(date);

+0

Vielen Dank für Ihr Shoot andreas, aber es scheint, dass Sie looping werfen das gleiche Datum https://jsfiddle.net/xxeorLjf/ – PrinceZee

+0

@PrinceZee Argh ... Falsche Version ... Ich habe den Code aktualisiert :) – Andreas

0

Ich glaube, wenn Sie Ihre addTimeSlot Funktion vereinfachen, erhalten Sie das Ergebnis die Sie suchen.

addTimeSlot = function(x, index) { 
 
    _.extend(x.timeSlot, { 
 
    available: true, 
 
    placeAfter: "", 
 
    placeBefore: "", 
 
    slotNumber: index 
 
    }) 
 
}

Wenn ich richtig verstehe, sieht es aus wie Ihre slotNumber Attribute nur Indexzahlen sind. Da Sie die -Funktion innerhalb einer each-Methode verwenden, können Sie einfach die Indexnummern selbst verwenden.

Demo: https://jsfiddle.net/yffvw126/

Verwandte Themen