2016-11-02 4 views
1

Es JSON:Holen Sie sich das Minimum und Maximum stammt aus JSON

[{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}] 

Wie in JavaScript, um die maximalen und minimalen Zeitpunkt davon zu bekommen?

+0

Also nur Ihre JSON –

+1

zwei Objekte haben entweder dieses Array von Daten sortieren und nimm den ersten und letzten Wert (wenn die Array-Größe klein ist) oder iteriere und vergleiche den Vergleich mit dem kleinsten und größten Wert. Versuche es! – gurvinder372

+0

Iterate über sie. Überlegen Sie '.forEach()'. – Brad

Antwort

1

var array = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}]; 
 

 
var max = null; 
 
var min = null; 
 

 
for (var i = 0; i < array.length; i++) { 
 
    var current = array[i]; 
 
    if (max === null || current.source > max.source) { 
 
    max = current; 
 
    } 
 
    if (min === null || current.source < min.source) { 
 
    min = current; 
 
    } 
 
} 
 

 
document.getElementById('maxResult').innerHTML = max.source; 
 
document.getElementById('minResult').innerHTML = min.source;
Max: <span id="maxResult"></span><br/ > 
 
Min: <span id="minResult"></span>

1

Sie so etwas tun könnte, sofern Ihr Datumsformat "yyyy-MM-dd" ist.

Konvertieren Sie die Datumszeichenfolge in dateKey. die immer der aufsteigenden Reihenfolge folgen, wenn die Daten fortfahren. 20160101 (1. Januar) ist immer weniger als 20161231 (31. Dezember).

Denken Sie daran, nur die Daten zu dateKey konvertieren und dateKeys auf das Objekt zuordnen und nur die Max und Min der dateKeys extrahieren und das tatsächliche Datum zurückgeben.

var datesArray = [{ 
 
    "source": "2016-11-02", 
 
    "sourcecount": 38 
 
}, { 
 
    "source": "2016-11-10", 
 
    "sourcecount": 30 
 
}, { 
 
    "source": "2016-11-31", 
 
    "sourcecount": 38 
 
}, { 
 
    "source": "2016-01-01", 
 
    "sourcecount": 30 
 
}]; 
 

 
var newObject = {}; 
 
var dates = datesArray.map(function(obj) { 
 
    var regEx = new RegExp(/-/g); 
 
    //Convert date to dateKey 
 
    var dateKey = parseInt(obj.source.replace(regEx, ""), 10) 
 
    newObject[dateKey] = obj; 
 
    return dateKey; 
 
}); 
 

 
console.log("Max", newObject[Math.max(...dates)].source); 
 
console.log("Min", newObject[Math.min(...dates)].source);

+0

Nice Verwendung von Spread-Operator. Ich würde auch eine Pfeilfunktion für '.map' verwenden. –

1

Try this

var data = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}] 
function compare(a,b) { 
    if (new Date(a.source) < new Date(b.source)) 
    return -1; 
    if (new Date(a.source) > new Date(b.source)) 
    return 1; 
    return 0; 
} 
data = data.sort(compare); 
var minDate = data[0].source; 
var maxDate = data[data.length - 1].source; 
+0

Leistungsmäßig ist es nicht effizient. 'sort' ist' o (nlogn) ', aber Sie können min und max finden, indem Sie das Array in' o (n) 'durchlaufen. –

1

Die gute Sache ist, Ihr Datum bereits in ISO 8601 Format ist. Sie können dies einfach nur tun,

var data = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}]; 

var dateArr = data.map(function(v) { 
    return new Date(v.source); 
}); 

// Sort the date 
dateArr.sort(function(a, b) { 
    return a.getTime() - b.getTime(); 
    // OR `return a - b` 
}); 

// The highest date is in the very last of array 
var highestDate = dateArr[dateArr.length - 1]; 

// The lowest is in the very first.. 
var lowestDate = dateArr[0]; 

Oder Sie es vorziehen, Ihre ursprüngliche Objekt stattdessen haben, dann können Sie das tun,

var data = [{"source":"2016-11-02","sourcecount":38},{"source":"2016-11-01","sourcecount":30},{"source":"2016-11-02","sourcecount":30},{"source":"2016-11-03","sourcecount":30}]; 

data.sort(function(a,b) { 
    var date1 = (new Date(a.source)); 
    var date2 = (new Date(b.source)); 
    return date1 - date2; 
}); 

// highest date is '2016-11-03' 
var highestDate = data[data.length - 1].source 

// lowest date is '2016-11-01' 
var lowestDate = data[0].source 
+1

Ich würde die erste bevorzugen. Danke TIL. –

Verwandte Themen