ich derzeit lodash und moment.js lerne bekommen, und ich bin ein Dummy-Daten.Verfahren Dummy-Daten verwenden, die eine Liste von 1000 doctors.I enthalten hat damit begonnen, die Arbeit mit Array.prototype.map() und Array.prototype.filter() und werden sie bald zu lodash konvertieren.kann nicht das gewünschte Ergebnis Array
Daten
var doctors = [
{
"id": 0,
"dateOfEmployment": "2012-12-27",
"dateOfTermination": "2015-01-13",
"dateOfBirth": "1978-06-06",
"gender": "Male"
},
{
"id": 1,
"dateOfEmployment": "2016-02-08",
"dateOfTermination": null,
"dateOfBirth": "1984-04-21",
"gender": "Female"
},
{
"id": 2,
"dateOfEmployment": "2010-11-30",
"dateOfTermination": "2015-09-03",
"dateOfBirth": "1975-09-24",
"gender": "Male"
},
{
"id": 3,
"dateOfEmployment": "2012-06-17",
"dateOfTermination": null,
"dateOfBirth": "1980-08-31",
"gender": "Female"
},..];
Ich mag würde ein Ergebnis von Array für die letzten 2 Jahre erhalten:
[{ date: '2015-04', count: 22 },
{ date: '2015-05', count: 25 },
...]
Am Anfang dieses habe ich versucht:
doctors = doctors.filter(function(doctor){
return moment(doctor.dateOfEmployment).isBetween('2014-04', '2016-04');
}).map(function(doctor){
return {
dates: moment(doctor.dateOfEmployment).format('YYYY-MM'),
count: new Date(doctor.dateOfEmployment) - new Date(doctor.dateOfEmployment) + 1 };
}););
console.log(doctors);
Ich bin verwirrt. Sollte ich zuerst ein neues Array von Ärzten mit nur ID, dateOfEmployment, dateOfTermination erstellen und beide Daten zu einem Moment machen. Filtern Sie dann das neue Datumsfeld mit einer Bedingung, in der das Moment zwischen den Jahren liegt, und dann mappen/reduzieren.
I von Brute-Force-Methode dachte, wo ich würde Schleife an jedem Arzt über 24mal und einen Zähler unter der Bedingung, basierend erhöhen, wenn doctorsEmployment Datum und doctorsTermination Datum entweder null oder gleich dem vorübergehenden Datum ist .Das temporäre Datum beginnt mit "2014-04" bis "2016-04" und drückt schließlich auf das Ergebnisobjekt.
Bin ich dieses Problem in einer falschen Weise nähern?
Jede Hilfe wird sehr geschätzt!
ich so das Gefühl ist eher ein * reduzieren * Betrieb als ein * Filter/Karte *. – Phil
anstelle der Abbildung, versuchen Sie dies: '_.groupBy (filteredArray, Arzt => vor (doctor.dateOfEmployment) .format ('YYYY-MM'))' – Thomas
Wie Phil sagt, sind Sie ein Array mit * Filter erstellen *, dann gehen Sie darüber und ein anderes Array mit * map * erstellen. Mit * reduce * können Sie beide in einer Iteration tun, um ein Array zu erstellen. Es ist wahrscheinlich auch viel effizienter, die Datumszeichenfolgen in Daten vor dem Aufruf der Funktion zu konvertieren, andernfalls erstellen Sie auch neue Dates oder moment.js-Instanzen in jeder Schleife. – RobG