返回具有最高值的变量名称

时间:2015-03-05 16:18:43

标签: javascript

我有几个整数变量。

var a;
var b;
var c;

我想知道哪个是最高的(值是整数/数字)。

我知道Math.max(),我发现了一些代码的例子,它们做了同样的事情(几乎就像)Math.max()......这些只是给出了最高值的值。

我不在乎实际价值是多少。我只是想知道哪个变量是最高的...我需要一些代码来返回具有最高值的变量的名称。

我有个性问卷。调查问卷有三种可能的结果 - 生气,温和,冷静。问题是多选(单选按钮),每个选项有三个答案可供选择。三个答案中的每一个对应于三个人物中的一个......用户选择最多的一个(通过选择相应的答案)是被授予的答案。我需要在测验结束时向用户显示这个....要么"你生气了#34;,"你很温和"或者"你很酷"。

示例问题(测试中有几个问题)

Which best describes your organisation style?<br/>
                        <input type="radio" name="18" value="angry" checked="checked">Good at getting things started, but not good at getting things done.<br/>
                        <input type="radio" name="18" value="mild">Very organised and can focus on a project from start to finish.<br/>
                        <input type="radio" name="18" value="cool">Need help getting things started, but I am good at seeing things to the finish.<br/>


var angry = 0;
var mild = 0;
var cool = 0;

function calculateIt() {

$('#steps input[type=radio]:checked').each(function(i){

    var $this = $(this);
    var itValue = $this.val();

    if (itValue == 'angry') {
        angry = angry + 1;
    }else if (itValue == 'mild') {
        mild = mild + 1;
    }else if (itValue == 'cool') {
        cool = cool + 1;
    }

});



// code to find highest of the three and return the variable name so that
// I can do :

var result = "You are" + THE NAME OF THE HIGHEST VARIABLE

alert(result);
}

任何想法?

谢谢!

4 个答案:

答案 0 :(得分:1)

您确实需要一个名称为键的对象,而不是一个独立声明的变量列表:

var obj = {
    a: 5, b: 3, c: 7
};

function findMax(obj) {
    var keys = Object.keys(obj);
    var max = keys[0];
    for (var i = 1, n = keys.length; i < n; ++i) {
       var k = keys[i];
       if (obj[k] > obj[max]) {
          max = k;
       }
    }
    return max;
}

无论使用何种实际名称,这都将有效。它还避免了一个问题,即它不可能(没有诉诸eval)来按名称访问本地声明的变量。

如果提供的对象为空,则该函数将返回undefined

答案 1 :(得分:0)

您应该考虑使用一个对象来跟踪实际的变量名称(使用键)

例如

// note that I messed with the order of values on purpose
// since objects should not care about keys order
var numericValues = {
    a: 100,
    c: 20,
    b: -2
};

function whichIsTheGreatest(numericValues) {

    var max = -Infinity; // calling Math.max with no arguments returns -Infinity
    var maxName = null;
    for (var key in numericValues) {
       var num = numericValues[key];

       if (num > max) {
           max = num;
           maxName = key;
       }

       max = (num > max && num) || max;
    }

    return maxName;
}

console.log(whichIsTheGreatest(numericValues)); // 'a'

答案 2 :(得分:0)

这是一个常见的构造,用于对键值对进行排序并返回具有最大值的键:

res = [{k:"a",v:a},{k:"b",v:b},{k:"c",v:c}].sort(
function(a,b){
return b.v-a.v
})[0].k

注意:此处的比较函数需要数字,对于其他值类型,请调整比较函数。

答案 3 :(得分:0)

以下是您重新设计的代码:

var answers = {angry:0,mild:0,cool:0}, res = 'angry'
...
if(++answers[$(this).val()]>answers[res]) {res = $(this).val()}
...
alert(['U R ',res,'!'].join(''))
  1. 定义集合(使用名称启用迭代和访问)和默认结果值
  2. 增加无线电值的计数,如果这大于当前最大值的计数,则更改结果值
  3. 提醒结果