2017-09-11 1 views
0

Datenquellelodash - Objekt Transformation

var data = { 
    "2017-08-09": [ 
    { 
     "time": "09:00", 
     "available": true 
    }, 
    { 
     "time": "13:00", 
     "available": true 
    }, 
    { 
     "time": "13:30", 
     "available": true 
    }, 
    ] 
} 

Wunsch Transformation

newData = [ "2017-08-09": ['09:00','13:00','13:30'] ] 

Ich habe versucht, die folgenden:

function recursiveFunction(collection){ 
      var newData = []; 

    _.forOwn(collection, function(value, key){ 

     newData.push({key}); 
     value.map(item => { 
       if (item.available === true) newData.key = item.time 
     }) 
    }); 
    console.log(newData) 
}; 

Aber nicht ganz da:/

http://jsfiddle.net/oa6nbgpy/

+1

Ihre Geige ist ganz anders als der Code in der Frage, haben Sie den falschen Link eingefügt? – user3080953

+0

Whoops! Ich denke, ich habe es getan, nur aktualisieren Sie es :) Danke – Deano

Antwort

1

Mit JS Vanille, verwenden Object#keys eine Reihe von Tasten zu bekommen, und wandeln sie in Objekte mit Array#map, Array#filter und computed property names:

var data = {"2017-08-09":[{"time":"09:00","available":true},{"time":"09:30","available":false},{"time":"11:30","available":true}],"2017-08-10":[{"time":"10:00","available":true},{"time":"10:30","available":false}]}; 
 

 
var result = Object.keys(data).map(function(key) { 
 
    return { 
 
    [key]: data[key] 
 
    .filter(function(o) { 
 
     return o.available; 
 
    }) 
 
    .map(function(o) { 
 
     return o.time; 
 
    }) 
 
    }; 
 
}); 
 

 
console.log(result);

+0

Danke, wie kann ich die Logik hinzufügen, um '' verfügbar ': false'? also konnte ich nur mal auflisten wann "verfügbar": true' – Deano

+1

Benutze Array # -Filter vor dem Mapping die Zeiten. Siehe aktuelles Beispiel. –

2

Karte über den Werten mapValues verwenden, filter nur die available mal und zupfen die Zeit mit map:

var newData = _.mapValues(data, times => _.map(_.filter(times, 'available'), 'time'));