我有几个整数变量。
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);
}
任何想法?
谢谢!
答案 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(''))