2017-03-22 4 views
-1

Ich arbeite durch das Sammeln von Informationen aus mehreren Arrays, aber ich habe einen Stolperstein getroffen. Ich muss in der Lage sein zu bestimmen, wie viele Tage in jeder Stadt verbracht wurden. Das Problem ist, dass ich keine Möglichkeit finde, Zeiteinträge zu zählen, die einen Tag als einen Tag umfassen. Im Folgenden sollten die ersten beiden Einträge in San Diego zu einem einzigen Tag führen, da beide Logs am selben Tag stattfanden.Erstellen Sie ein neues Array aus de-duped Daten

timeLogs = [ 
    {'city':'San Diego','date':'2017-03-21T18:52:00.984Z'}, 
    {'city':'San Diego','date':'2017-03-21T12:13:00.984Z'}, 
    {'city':'San Diego','date':'2017-03-19T11:02:00.984Z'}, 
    {'city':'Boulder','date':'2017-02-12T11:29:00.984Z'} 
] 

Was ich bin, ist, nach dem folgenden Array resultierende basierend auf dem oben:

daysPerCity = [ 
    {'San Diego':'2'}, 
    {'Boulder':'1'} 
] 

Derzeit auf einer Schleife ich arbeite, die die Daten in Strings coverts und prüft dann auf Gleichheit, wenn die gleich ich versuche, die Stadt in dem neuen Array nicht zu erhöhen, aber ich bin fest, wenn es die erste Instanz einer Stadt trifft ...

+0

Prüfung (http://stackoverflow.com/questions/542938/how-do-i-get-the-number-of-days-between-two-dates-in-javascript) up – Redu

+0

können Sie auch verwenden [moment.js] (https://momentjs.com/docs/#/displaying/difference/) – ArtemSky

Antwort

-1

Sie Array-Methoden wie reduce und map verwenden können, um ein Objekt zu bauen enthält eindeutige Tage, die nach Stadt gruppiert sind, a nd verwenden Sie dann Object.keys(...).length, um die Anzahl der einzelnen Tage zu erhalten.

var timeLogs = [ 
 
    { city: 'San Diego', date: '2017-03-21T18:52:00.984Z' }, 
 
    { city: 'San Diego', date: '2017-03-21T12:13:00.984Z' }, 
 
    { city: 'San Diego', date: '2017-03-19T11:02:00.984Z' }, 
 
    { city: 'Boulder', date: '2017-02-12T11:29:00.984Z' } 
 
] 
 

 
var daysPerCity = timeLogs.reduce(function (map, e) { 
 
    (map[e.city] = map[e.city] || {})[e.date.slice(0, 10)] = true 
 
    return map 
 
}, {}) 
 

 
Object.keys(daysPerCity).forEach(function (k) { 
 
    this[k] = Object.keys(this[k]).length 
 
}, daysPerCity) 
 

 
console.log(daysPerCity)

-1

Sie könnten diesen ES6 Code verwenden: [? Wie kann ich die Anzahl der Tage zwischen zwei Daten in JavaScript bekommen]

const timeLogs = [ 
 
    {'city':'San Diego','date':'2017-03-21T18:52:00.984Z'}, 
 
    {'city':'San Diego','date':'2017-03-21T12:13:00.984Z'}, 
 
    {'city':'San Diego','date':'2017-03-19T11:02:00.984Z'}, 
 
    {'city':'Boulder','date':'2017-02-12T11:29:00.984Z'} 
 
]; 
 

 
const result = Object.assign({}, ...Array.from(
 
    timeLogs.reduce((acc, {city, date}) => { 
 
     (acc.get(city) || acc.set(city, new Set).get(city)) 
 
      .add(date.substr(0, 10)); 
 
     return acc; 
 
    }, new Map), 
 
    ([city, days]) => ({ [city]: days.size }) 
 
)); 
 

 
console.log(result);

+0

Warum der Downvote? – trincot

Verwandte Themen