Подчеркивание, чтобы найти минимальное и максимальное значение объекта
В соответствии с учебным пособием здесь,
Коллекция может быть либо массивом, либо объектом, ассоциированным массивом в JavaScript
означает, что все функции в collection
одинаково применимы к объектным литералам.
Например, я хотел выбрать значения на основе условия. Скажем,
var obj = {
"1": {id: 1, val: 2},
"2": {id: 2, val: 5},
"3": {id: 3, val: 8},
"4": {id: 4, val: 1}
}
Я хочу найти max и min поля val. Глядя на API, я думал использовать pluck
для получения массива val
, а затем min
и max
.
- Могу ли я применить pluck to object (как пример api показывает использование в массиве объектов)
- Есть ли лучший способ?
Спасибо.
Ответы
Ответ 1
означает ли это, что все функции, находящиеся в коллекции, одинаково применимы к объектным литералам?
Да.
Можно ли применить pluck to object (как пример api показывает использование в массиве объектов)
Вы пробовали? Да, вы можете, но вы вернете массив.
есть ли лучший способ?
Math.min.apply(null, _.pluck(obj, "val"))
(или _.min(_.pluck(obj, "val"))
) для получения минимального значения. Тем не менее, если вы хотите получить весь объект (с id), вы также можете использовать параметр iterator
min/max:
var lowest = _.min(obj, function(o){return o.val;});
Ответ 2
Другой способ сделать это, и отлично, если вы хотите вернуть несколько строк, все из которых имеют большое значение, таков:
_.where(obj, {score: _.max(_.pluck(obj, 'value'))});