Javascript 使用下划线.js从对象数组中获取最小值和最大值
假设我有以下结构Javascript 使用下划线.js从对象数组中获取最小值和最大值,javascript,arrays,underscore.js,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 如何用下划线编写代码来实现此目的?使用u0.max和0
var myArrofObjects = [
{prop1:"10", prop2:"20", prop3: "somevalue1"},
{prop1:"11", prop2:"26", prop3: "somevalue2"},
{prop1:"67", prop2:"78", prop3: "somevalue3"} ];
我需要根据prop2找到最小值和最大值,所以这里的数字是20和78
如何用下划线编写代码来实现此目的?使用u0.max和0.property:
var max value = _.max(myArrofObjects, _.property('prop2'));
下划线 使用u.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;
})
像这样的东西,你不需要下划线
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 });
阵列对象。
map(函数(elt){return elt.prop2;})。
减少(功能)(结果,elt){
如果(elt>result.max)result.max=elt;
如果(elt
使用uu.max如下:
var max_object = _.max(myArrofObjects, function(object){return object.prop2})
使用函数作为第二个输入将允许您访问对象中的嵌套值。您可以使用u.maxBy来查找最大值,如下所示
var maxValObject = _.maxBy(myArrofObjects, function(o) { return o.prop2; });
或者使用iteratee速记,如下所示
var maxValObject = _.maxBy(myArrofObjects, 'prop2');
同样地u.minBy也一样
Ref:,我可能只需要
每个
设置最小/最大VAL;没有“最小值/最大值”,只有min
和max
。排序将花费更长的时间,但您始终可以排序并获取第一个/最后一个VAL。@Andreas。是的,我知道这些函数的存在。不过,我想问一些更具体的问题,请参见问题。@Dave,我不确定最小/最大值是多少。我需要一个最小值和一个最大值。如中所示,两个不同的值。我认为问题很清楚。@sarsnake:这是一个假设函数,同时返回最小值和最大值。但是无论如何,为什么\u min
和\u max
不够好呢?在第一个例子中,我想应该是prop2
。我不太同意这个解决方案。您正在进行一次可能非常昂贵的排序,但只为了找到最小值和最大值。是的,我们的想法是为将来的其他操作创建一个排序数组。我不知道OP的用例,但这就是我要做的。如果你想在旧浏览器中兼容,你确实需要下划线。嗯,哪个旧浏览器?请注意,max返回空数组的无穷大。可能很明显,但请注意,你需要做max\u object.prop2
来获得最大值(因为它返回整个对象)。