如何让Math.min()返回变量名而不是数字

时间:2016-06-04 20:45:44

标签: javascript

我有五个变量 - organism.one,organism.two等等,最多五个。 它们都等于随机数。

我试图找到最小的,我可以使用Math.min()。

但是,Math.min返回最小数字,而不是保存该最小值的变量名称。

请帮忙,我是JavaScript的新手。到目前为止,这是我的代码:

runt = Math.min(organism.one, organism.two, organism.three, organism.four, organism.five);
console.log("The runt is " + runt);

7 个答案:

答案 0 :(得分:1)

由于您的对象包含包含数字的键,因此您可以使用 for ... in 来迭代它们以找到最小的键:

var organism = {
      one: 50,
      two: 100,
      three: 25,
      four: 15,
      five: 999
    },
    min = Infinity,
    key;
  
for(var i in organism) {
  if(organism[i] < min) {
    min = organism[i];
    key = i;
  }
}

console.log(key); //four

答案 1 :(得分:1)

我的建议是使用[] .reduce

var objects = [{
    name: 'one',
  val: 13
},
{
    name: 'two',
  val: 12
},
{
    name: 'three',
  val: 11
}];

var minimum = objects.reduce(function(obj1, obj2){ 
  return (obj1.val < obj2.val) ? obj1: obj2;        
});

console.log(minimum.val)

答案 2 :(得分:0)

这应该这样做:

var lowestValsKey;
for(var key in organism){
    if(!lowestValsKey){
        lowestValsKey = key;
    }
    if(organism[key] < organism[lowestValsKey]){
        lowestValsKey = key;
    } 
}

console.log(lowestValsKey);

答案 3 :(得分:0)

如果我理解你正在尝试做什么,也许你可以使用面向对象的方法。

 var organism = { "one" : someValue, "two" : someValue, "three" : someValue, "four": someValue, "five": someValue };
 var min = null;
 var minKey = null;

 for( var key in organism ){
    if( null === min ){
        // we're at the beginning of the object, so assign min to that value.
        min = organism[key];
        minKey = key;
    }
    else if(( null !== min ) && ( organism[key] < min )){
        min = organism[key]; 
        minKey = key;
    }
 }
 console.log( "The key with the min value is: " + key + " and the value is: " + organism[key] );

答案 4 :(得分:0)

不需要所有这些不同的功能,你非常接近,你只需要一个循环来完成它:

获得分数后,循环遍历对象以找到匹配项:

JSBin Example

var organism = {
  two: 2,
  three: 3,
  four: 4,
  one: 1, 
  five: 5
};

var runt = Math.min(organism.one, organism.two, organism.three, organism.four, organism.five);

var lowest;
for (var org in organism) {
  if (organism[org] === runt) {
    lowest = org;
  }
}

答案 5 :(得分:0)

正如您所注意到的,Math.min只接受参数,只返回一个数字。没有办法让它按照你的要求去做。

但是,如果我正确地阅读你的问题,你真正要问的是:

  

我可以将对象传递给函数并获取最低值的键名吗?

如果是这样,有办法做到这一点。

var organism = {
  one: 12,
  two: 19,
  three: -1,
  four: 99,
  five: 6
};

function findSmallestKey(obj) {
  var smallestKey;
  var smallestValue = Number.MAX_VALUE;

  Object.keys(obj).forEach((key) => {
    var val = obj[key];
    
    if (val < smallestValue) {
       smallestValue = val;
      smallestKey = key;
    }   

  });
  
  return smallestKey;
}

var k = findSmallestKey(organism);

console.log('Smallest key is ', k);

答案 6 :(得分:0)

你可能不会找到你想要的答案,因为这是不可能的。但是,您可以创建自己的功能来完成它。

function main(){

  function getRandom(min,max){
    return Math.floor(Math.random()*(max-min))+min;
  }
  
  var organism = {
    one: getRandom(1,10),
    two: getRandom(1,10),
    three: getRandom(1,10),
    four: getRandom(1,10),
    five: getRandom(1,10),
  };


  function findMin(obj){
  
    var keys = Object.keys(obj);
    var min  = {
      name:keys[0],
      val:obj[keys[0]]
    };
              
    keys.forEach((key)=>{
      if (obj[key] < min.val)
        min={name:key,val:obj[key]};
    });
  
    return min;
  }

  var min = findMin(organism);
  document.getElementById('organisms').innerHTML = JSON.stringify(organism);
  document.getElementById('min').innerHTML = ([min.name,min.val].join(': '));
  
}
<button onclick="main();">Run</button>
<pre id="organisms"></pre>
<div id="min"></div>