найти максимальное значение дочернего объекта - PullRequest
5 голосов
/ 12 января 2012

Каким будет элегантный способ найти максимальное значение дочернего объекта в javascript?

Пример:

найти максимальное значение количества этого объекта (здесь показано как json):

{"density":[
  {"price":1.22837, "quantity":48201},
  {"price":1.39837, "quantity":28201},
  {"price":1.40107, "quantity":127011},
  {"price":1.5174,  "quantity":75221},
  {"price":1.60600, "quantity":53271}
]}

спасибо за любой совет!

PS: просто чтобы уточнить: конечно, я мог бы пройтись, но я думал, что будет более элегантный способ ...

Ответы [ 3 ]

10 голосов
/ 12 января 2012

Существует метод reduce прототипа Array:

var arr = JSON.parse(objstring)["density"];
var max = arr.reduce(function(a, b) {
   return Math.max(a, b.quantity);
}, 0);

Другое решение будет выглядеть примерно так:

var max = Math.max.apply(null, arr.map(function(item){
   return item["quantity"];
}));

Для более "изящных" способов существуют функциональные библиотеки, которые предоставляютзаводские функции геттера и другие методы Array.Решение с такой библиотекой может выглядеть как

var max = arr.get("quantity").max();

, что будет в точности соответствовать описанному выше, но лучше выражено.

2 голосов
/ 12 января 2012

Нет другого способа, кроме циклического перехода, потому что вам нужно посетить каждого ребенка, чтобы узнать, является ли параметр quantity новым максимальным значением.Другими словами, сложность задачи O (n).Если бы дети были упорядочены по количеству, это была бы другая история (т.е. просто получить первого или последнего ребенка в списке.)

что-то вроде следующего ...

var json = '{"density":[{"price":1.22837,"quantity":48201},{"price":1.39837,"quantity":28201},{"price":1.40107,"quantity":127011},{"price":1.5174,"quantity":75221},{"price":1.60600,"quantity":53271}]}'

var x = JSON.parse(json);
var max = 0;

x.density.forEach(function(item){
    if (item.quantity > max) max = item.quantity;
});

После этого запуска max - это максимальное количество

заметка, что вы не дали нам правильный json, поэтому я немного его подправил.

Вот пример - нажмите run и посмотрите вконсоль http://jsfiddle.net/e3dQe/

0 голосов
/ 12 января 2012

Как насчет метода max ()? Но сначала вам нужно собрать все значения в массиве ...

var obj = // your object
var values = new Array();

for (key in obj) {
  values.push(obj[key])
}

var max = values.max()

Не намного элегантнее, но другое решение.

...