2013-04-06 15 views
22

Zgodnie z poradnika here,podkreślić, aby znaleźć minimalne i maksymalne wartości obiektu

Zbiór może być albo tablicą lub przedmiot, stowarzyszona Tablica w JavaScript

To znaczy, że wszystkie funkcje pod numerem collection można również zastosować do literałów obiektów. Na przykład chciałem wybrać wartości na podstawie warunku. Powiedz,

var obj = { 
"1": {id: 1, val: 2}, 
"2": {id: 2, val: 5}, 
"3": {id: 3, val: 8}, 
"4": {id: 4, val: 1} 
} 

Chcę znaleźć max i min pola wartości. Patrząc na API, myślałem, aby użyć pluck, aby uzyskać tablicę z val, a następnie min i max.

  • mogę zastosować zrywać sprzeciwu (jako przykład api pokazuje zastosowanie w tablicy obiektów)
  • jest jakiś lepszy sposób?

Dzięki.

+0

Zwykły js Filtr z matematyką. Być może ? – mplungjan

Odpowiedz

52

Czy to oznacza, że ​​wszystkie funkcje znajdujące się w kolekcji mają zastosowanie również do literałów obiektów?

Yes.

mogę zastosować zrywać sprzeciwu (jako przykład api pokazuje zastosowanie w tablicy obiektów)

Czy to próbował? Tak, możesz, ale otrzymasz z powrotem tablicę.

czy jest lepszy sposób?

Math.min.apply(null, _.pluck(obj, "val")) (lub _.min(_.pluck(obj, "val"))) dla uzyskania minimalnej wartościjest w porządku. Jednak, jeśli chcesz, aby cały obiekt (id) można również użyć iterator parameter min/max:

var lowest = _.min(obj, function(o){return o.val;}); 
+0

Piękna odpowiedź. Dzięki! –

+0

_.pluck został zastąpiony przez _.map w najnowszej wersji Lodasha. Przykład będzie taki: _.min (_. Map (obj, "val")) – muchacho

+0

Świetna odpowiedź Mam tę formę 'var min = (_.min (val, function (o) {return o.displayorder;})). displayorder; ' –

0

Kolejny sposób to zrobić, i świetne, jeśli chcesz wrócić wiele wierszy, które wszyscy mają wysoka wartość jest taka:

_.where(obj, {score: _.max(_.pluck(obj, 'value'))}); 
Powiązane problemy