Javascript 检查最大变量的快速方法?
我需要一种方法来获取具有最大值的变量的名称Javascript 检查最大变量的快速方法?,javascript,Javascript,我需要一种方法来获取具有最大值的变量的名称 a = 55; b = 13; c = 45; d = 5; var top = ''; if((a>b)&&(a>c)&&(a>d)){ top = 'a'; } if((b>a)&&(b>c)&&(b>d)){ top = 'b'; } if((c>a)&&(c>b)&&(c>d)){ top =
a = 55;
b = 13;
c = 45;
d = 5;
var top = '';
if((a>b)&&(a>c)&&(a>d)){ top = 'a'; }
if((b>a)&&(b>c)&&(b>d)){ top = 'b'; }
if((c>a)&&(c>b)&&(c>d)){ top = 'c'; }
if((d>a)&&(d>b)&&(d>c)){ top = 'd'; }
有更好或更快的方法吗?一种简单的方法,将所有内容存储在一个对象中,然后在键上循环:
function high(obj) {
var highest = Number.NEGATIVE_INFINITY,
keyName = null;
for (var key in obj) {
if( obj[key] > highest ) {
highest = obj[key];
keyName = key;
}
}
return keyName;
}
//您可以保留输入变量
var a=55;
var b=13;
var c=45;
var d=5;
var obj={
a:a,
b:b,
c:c,
d:d
}
var-max;
var varName;
Object.keys(obj).forEach(函数(key){
如果(!max | | max
无法直接获取变量名:
很少有语言支持您想要做的事情,因为变量
名称仅在源代码中为您的利益而存在。他们没有
以该形式存在于编译的可执行代码中,并且
追踪他们的费用会非常昂贵
如果您想这样做,您的设计有一些根本性的错误,因为没有理由排除使用最惯用的方式,即使用,在JavaScript中,这意味着在可用和适当的情况下使用或实际使用
基于对象的方法:
如果您没有访问权限,则使用最兼容的方式:
可以使用对象并查找属性名称。最简洁的方法是使用函数
var obj = {a:55,b:13,c:45,d:5};
var maxPropertyName = Object.keys(obj).reduce(function(previous,key){
return obj[previous] > obj[key] ? previous : key;
})
console.log(maxPropertyName);
输出:
基于地图的方法:
对于这种情况,a似乎更合适,因为它看起来像是同类的集合
,而不是某个东西的类型
映射实例仅对集合有用,并且
您应该考虑在以前使用的代码中修改代码。
这类活动的对象。对象应作为记录使用,带有字段和
方法。如果你还不确定要用哪一种,问问自己
以下问题:
- 在运行时之前密钥通常是未知的,您需要查看它们吗
动态启动
- 所有值是否具有相同的类型,并且可以互换使用?
你需要不是字符串的键吗
- 是否经常添加或删除键值对?你有电话吗
任意(容易更改)数量的键值对
- 集合是否已迭代?这些都是您需要地图的标志
收集
相反,如果您有固定数量的钥匙,请对其进行操作
单独使用,并区分它们的用法,然后您需要
反对
下面是如何将.reduce()
方法添加到:
相同的.reduce()
代码现在可以工作:
输出:
一种方法是,若不能使用对象,则获取最大值,然后将各个值检查为变量。在这里你不会有非常复杂的条件。另外,使用if…else if…else
比使用多个if
a=55;
b=13;
c=45;
d=5;
var max=数学最大值(a、b、c、d);
var varName=“”;
如果(最大值===a){
varName=“a”;
}
否则如果(最大===b){
varName=“b”;
}
否则如果(最大===c){
varName=“c”;
}
否则{
varName=d;
}
警报(varName)代码>这样,您就不必关心变量名。也不必重复变量名
// init
var obj={};
var max=0,maxName="";
var x={};
for(var key in window){
x[key]=window[key];
}
// your code
a = 55;
b = 13;
c = 45;
d = 5;
// end of your code
// select the max num
for(var key in window){
if(typeof(window[key]) == "number" && typeof(x[key])!="number"){
if(window[key]>max){
max=window[key];
maxName=key;
}
}
}
// output the variable name
console.log(maxName);
您可以编写一个方法来重用:
function getTop(func){
// init
var obj={};
var max=0,maxName="";
var x={};
for(var key in window){
x[key]=window[key];
}
func();
// select the max num
for(var key in window){
if(typeof(window[key]) == "number" && typeof(x[key])!="number"){
if(window[key]>max){
max=window[key];
window[key]=undefined;
maxName=key;
}
}
}
// output the variable name
return maxName;
}
您可以使用该代码获取顶级变量名:
var top=getTop(function(){
a=11;
b=22;
c=23;
d=14;
});
为什么在top
中需要变量名作为字符串?添加完整的代码。您可以将所有变量定义为对象的一部分,然后在键值对上循环以找到最大值。我不确定是否有办法将变量名作为字符串。这似乎是一个完全的XY问题。你能详细说明你想要完成什么吗?@Rajesh-有一个else没有任何意义,条件是反对不同的变量。我投票结束这个问题,因为它是关于工作代码的,属于on。它是基于意见的,并且回答质量的多样性表明我需要一种方法来获取变量的名称-这不需要names@lucianandrei它返回obj中的最后一个键,而不是具有最大值的键。@ShanShan是的,现已修复,感谢您的建议@xRobot-您意识到这并不比您之前所做的更好,在我看来更糟,因为它现在已经做了两次相同的工作。@JarredRoberson,如果用户没有使用对象的选项,请建议一种更好的方法。我已经提到,如果你不能使用object,这意味着object方法是一种理想的方法。但有时我们的代码并不是处于最佳状态,需要修补工作。这是一个可怕的建议,给那些不理解为什么他们试图做的是错误的,以及正确的方法是什么的人。这与任何可以被视为正确方法的方法都不接近。
a
// init
var obj={};
var max=0,maxName="";
var x={};
for(var key in window){
x[key]=window[key];
}
// your code
a = 55;
b = 13;
c = 45;
d = 5;
// end of your code
// select the max num
for(var key in window){
if(typeof(window[key]) == "number" && typeof(x[key])!="number"){
if(window[key]>max){
max=window[key];
maxName=key;
}
}
}
// output the variable name
console.log(maxName);
function getTop(func){
// init
var obj={};
var max=0,maxName="";
var x={};
for(var key in window){
x[key]=window[key];
}
func();
// select the max num
for(var key in window){
if(typeof(window[key]) == "number" && typeof(x[key])!="number"){
if(window[key]>max){
max=window[key];
window[key]=undefined;
maxName=key;
}
}
}
// output the variable name
return maxName;
}
var top=getTop(function(){
a=11;
b=22;
c=23;
d=14;
});