2012-07-29 101 views
1

我有一个对象,看起来像这样:如何通过查找JavaScript对象中多个键/值对中的最小值来选择键/值对?

var obj = { thingA: 5, thingB: 10, thingC: 15 }

我希望能够选择键/值对thingA:基于以下事实:5是最小的值相比,其他5键/值对。

谢谢!

+1

通过键循环,并比较值(跟踪最低值)? – 2012-07-29 22:35:19

+0

不同“键”具有相同最小值的情况如何?比方说'thingD:5'。可能吗?在这种情况下,预期的结果是什么? – ZER0 2012-07-29 22:51:53

+0

@ ZER0好问题!在这种情况下,这并不重要;任何结果键都会做,如果它有最小的值。 – 2012-07-30 08:09:18

回答

2

没有内置这样做,但:

var minPair = Object.keys(obj).map(function(k) { 
    return [k, obj[k]]; 
}).reduce(function(a, b) { 
    return b[1] < a[1] ? b : a; 
}); 

minPair // ['thingA', 5] 

或者SANS的ECMAScript 5个扩展名:

var minKey, minValue; 

for(var x in obj) { 
    if(obj.hasOwnProperty(x)) { 
     if(!minKey || obj[x] < minValue) { 
      minValue = obj[x]; 
      minKey = x; 
     } 
    } 
} 

[minKey, minValue] // ['thingA', 5] 
+0

谢谢!我从来没有真正使用过map.reduce模式,因此我需要一些时间来学习它。 – 2012-07-30 08:10:00

1

这里是一个简单的函数,可以做你想要的到底是什么 -

function getSmallest(obj) 
{ 
    var min,key; 
    for(var k in obj) 
    { 
     if(typeof(min)=='undefined') 
     { 
      min=obj[k]; 
      key=k; 
      continue; 
     } 
     if(obj[k]<min) 
     { 
      min=obj[k]; 
      key=k; 
     } 
    } 
    return key+':'+min; 
} 



//test run 
var obj={thingA:5,thingB:10,thingC:15}; 
var smallest=getSmallest(obj)//thingA:5 
相关问题