从带有下划线的对象数组中获取最小值和最大值



假设我有如下结构

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

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

我如何在下划线中编写代码来做到这一点?

对于这样的内容,实际上不需要下划线。

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

您可以使用_。

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

或使用如下所示的被迭代对象简写

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

类似于_。

裁判:https://lodash.com/docs/4.17.4 maxBy

use _。Max and _property:

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

使用

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

使用函数作为第二个输入将允许您访问对象中的嵌套值。

下划线

使用_.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;
})

最新更新