我有三十个变量都是数字:
h0 = 23
h1 = 27
h2 = 90
...
如何找到最大的变量?
此处的输出应为h2。
答案 0 :(得分:2)
假设变量都以连续顺序命名,您可以将它们添加到数组中:
var values = [h0, h1, ....h29];
然后迭代数组,比较值并跟踪最大值的索引:
var maxIndex = 0;
for (var i = 1; i < values.length; i++) {
if (values[maxIndex] < values[i]) {
maxIndex = i;
}
}
maxIndex
现在将包含最大值的索引,您可以将其与'h'
连接,例如
console.log('h' + maxIndex);
当然这种方法做了很多假设并且很脆弱,但这就是你在做这种“元编程”时所得到的(变量名真的不应该与任何关注任何使用该应用程序的人。)
使用对象可以使它更好一点,至少关于变量名称:
var values = {
h0: h0,
h1: h1,
...
};
var maxProp = '';
for (var prop in values) {
if (values[maxProp] < values[prop]) {
maxProp = prop;
}
}
答案 1 :(得分:0)
将它们放在数组而不是单个变量中,然后遍历数组。
要强制它,比较相邻的变量对,然后是结果对,直到只留下一个。
答案 2 :(得分:0)
如果您希望答案是&#39; h2&#39;而不是&#39; 90&#39; (根据评论),尝试使用Object而不是单独的变量(或数组,如其他答案中所述)。
var find_max = {
'h0': 23,
'h1': 27,
'h2': 90,
// and so on
};
然后遍历对象的属性以找到最大值。
var max;
for (var h in find_max) {
if (!max || (find_max[h] > find_max[max])) {
max = h;
}
}
你可以改进这个循环 - 尝试使用hasOwnProperty
来确保循环中的唯一项目是你想要的。
答案 3 :(得分:0)
您可以通过这种方式使用the bracket notation检查窗口对象来轻松获取它:
h0 = 11;
h1 = 24;
h2 = 28;
h3 = 345;
h4 = 1;
var i = 0;
var max = {
name: 'none',
val: 0
};
while (nextItem = window['h'+i]) {
if (nextItem > max.val) {
max = {
name: 'h'+i,
val: nextItem
};
};
i++;
};
document.getElementById('max').innerHTML = max.name + ' = ' + max.val;
&#13;
<p>Maximum is: <span id="max"></span></p>
&#13;
答案 4 :(得分:-1)
编辑:由于没有考虑到真正的问题,我在发布以下内容时太仓促了。从那时起,已经有了很好的答案,所以我只是展示一种方法,你可以按降序对变量进行排序。一种方法是将数字放在一个对象数组中,以便:
numArray = [{name:h0, value:23}, {name:h1, value:27}, {name:h2, value:90}];
并做:
numArray.sort(function(a, b){
return b.value - a.value;
});
根据这个:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
一旦你在数组中有数字,它看起来很容易。你可以打电话给
Math.max.apply(null, numArray)
在数组上,或者,使用ES6,你可以说Math.max(... numArray)(...是“spread”运算符)。
您也可以进行排序:
numArray.sort(function(a, b){
return b - a;
});
哪个会按降序对数组进行排序,最大数字现在为numArray [0]。