从JavaScript对象数组中获取最大值和最小值的最佳方法是什么?
给定:
var a = [{x:1,y:0},{x:-1,y:10},{x:12,y:20},{x:61,y:10}];
var minX = Infinity, maxX = -Infinity;
for( var x in a ){
if( minX > a[x].x )
minX = a[x].x;
if( maxX < a[x].x )
maxX = a[x].x;
}
看起来有点笨拙。有没有更优雅的方法,比如使用dojo?
6条答案
按热度按时间xuo3flqw1#
它不会更有效,但只是为了笑:
或者如果你愿意用三行代码:
pgvzfuti2#
使用此示例
klr1opcd3#
可以使用
sort
。此方法修改原始数组,因此可能需要克隆它:cmssoen24#
我知道这有点太晚了,但是对于新用户你可以使用lodash。它让事情简单多了。
或者你可以用.sort()来完成任务,就像***拖延者***解释的那样。
qcbq4gxm5#
另一个想法是通过将这些值减少为一个值来计算max/min。这在时间复杂度方面与您的版本完全相同,但思考方式略有不同。(从JavaScript 1.8开始支持
reduce()
。)bvn4nwqk6#
您可以使用
map
功能,但它几乎只是围绕for
的语法糖。任何使用reduce
的解决方案都会比您的“幼稚”解决方案慢两倍,因为它会为最小值迭代一次数组,为最大值迭代一次数组。就性能而言,您当前的解决方案几乎是最好的。您所能做的就是通过缓存来减少更多的查找。