使用underscore.js从对象数组中获取min和max

sar*_*ake 4 javascript arrays underscore.js

假设我有以下结构

var myArrofObjects =  [
    {prop1:"10", prop2:"20", prop3: "somevalue1"},
    {prop1:"11", prop2:"26", prop3: "somevalue2"},
    {prop1:"67", prop2:"78", prop3: "somevalue3"} ];
Run Code Online (Sandbox Code Playgroud)

我需要根据prop2找到最小值和最大值,所以这里我的数字是20和78.

你能帮我写下这样做的下划线方式吗?

小智 11

对于像这样的事情,你真的不需要下划线.

Math.max(...arrayOfObjects.map(elt => elt.prop2));
Run Code Online (Sandbox Code Playgroud)

如果你不是ES6那样的人,那么

Math.max.apply(0, arrayOfObjects.map(function(elt) { return elt.prop2; }));
Run Code Online (Sandbox Code Playgroud)

尽量使用相同的方法.

如果你打算同时找到最大值和最小值,那么

arrayOfObjects . 
  map(function(elt) { return elt.prop2; }) .
  reduce(function(result, elt) {
    if (elt > result.max) result.max = elt;
    if (elt < result.min) result.min = elt;
    return result;
  }, { max: -Infinity, min: +Infinity });
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用 _.maxBy 来查找最大值,如下所示。

var maxValObject = _.maxBy(myArrofObjects, function(o) { return o.prop2; });
Run Code Online (Sandbox Code Playgroud)

或使用 iteratee 简写如下

var maxValObject = _.maxBy(myArrofObjects, 'prop2');
Run Code Online (Sandbox Code Playgroud)

类似地还有 _.minBy;

参考: https: //lodash.com/docs/4.17.4#maxBy


Mei*_*eir 2

使用 _.max 和 _.property:

var max value = _.max(myArrofObjects, _.property('prop2'));
Run Code Online (Sandbox Code Playgroud)