使用underscore.js

时间:2015-10-26 17:29:46

标签: javascript arrays underscore.js

假设我有以下结构

var myArrofObjects =  [
    {prop1:"10", prop2:"20", prop3: "somevalue1"},
    {prop1:"11", prop2:"26", prop3: "somevalue2"},
    {prop1:"67", prop2:"78", prop3: "somevalue3"} ];

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

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

5 个答案:

答案 0 :(得分:11)

你真的不需要像这样的下划线。

Math.max(...arrayOfObjects.map(elt => elt.prop2));

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

Math.max.apply(0, arrayOfObjects.map(function(elt) { return elt.prop2; }));

使用相同的方法至少。

如果您打算同时查找最大值和最小值,那么

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 });

答案 1 :(得分:2)

使用_.max和_.property:

var max value = _.max(myArrofObjects, _.property('prop2'));

答案 2 :(得分:1)

使用_.max,如下所示:

var max_object = _.max(myArrofObjects, function(object){return object.prop2})

使用函数作为第二个输入也可以访问对象中的嵌套值。

答案 3 :(得分:1)

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

var maxValObject = _.maxBy(myArrofObjects, function(o) { return o.prop2; });

或使用iteratee简写如下

var maxValObject = _.maxBy(myArrofObjects, 'prop2');

同样也是_.minBy;

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

答案 4 :(得分:0)

<强>下划线

使用_.sortBy(..)按属性

对对象进行排序
var sorted = _.sortBy(myArrofObjects, function(item){
    return item.prop2;
});

然后你的prop1属性会得到一个排序数组,sorted[0]是最小值,而sorted[n]是最大值

普通JS

myArrofObjects.sort(function(a, b) {
    return a.prop2 - b.prop2;
})