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;
});