La réduction est utile pour ce genre de choses : pour effectuer des opérations d'agrégation (comme min, max, moyenne, etc.) sur un tableau d'objets, et renvoyer un seul résultat :
myArray.reduce(function(prev, curr) {
return prev.Cost < curr.Cost ? prev : curr;
});
...ou vous pouvez définir cette fonction interne avec la syntaxe de fonction ES6 :
(prev, curr) => prev.Cost < curr.Cost ? prev : curr
Si vous voulez être mignon, vous pouvez attacher ça au tableau :
Array.prototype.hasMin = function(attrib) {
return (this.length && this.reduce(function(prev, curr){
return prev[attrib] < curr[attrib] ? prev : curr;
})) || null;
}
Maintenant tu peux juste dire :
myArray.hasMin('ID') // result: {"ID": 1, "Cost": 200}
myArray.hasMin('Cost') // result: {"ID": 3, "Cost": 50}
myEmptyArray.hasMin('ID') // result: null
Veuillez noter que si vous avez l'intention de l'utiliser, il ne comporte pas de contrôles complets pour toutes les situations. Si vous passez un tableau de types primitifs, il échouera. Si vous vérifiez une propriété qui n'existe pas, ou si tous les objets ne contiennent pas cette propriété, vous obtiendrez le dernier élément. Cette version est un peu plus volumineuse, mais elle comporte ces vérifications :
Array.prototype.hasMin = function(attrib) {
const checker = (o, i) => typeof(o) === 'object' && o[i]
return (this.length && this.reduce(function(prev, curr){
const prevOk = checker(prev, attrib);
const currOk = checker(curr, attrib);
if (!prevOk && !currOk) return {};
if (!prevOk) return curr;
if (!currOk) return prev;
return prev[attrib] < curr[attrib] ? prev : curr;
})) || null;
}