使用变量名返回值

时间:2018-02-03 23:09:07

标签: javascript variables

var a = 1;
var b = 2;
var c = 3;

var d = Math.max(a, b, c);
return d;

此代码返回 3 。我需要的结果不仅包括计算值,还包含变量名。

所需的输出: c - 3

5 个答案:

答案 0 :(得分:2)

如果您可以将这些值存储在对象中,则可以在存储密钥名称的同时循环键并比较它们的值。

var values = { a: 1, b: 2, c: 3 }

var maxName;
var max;
for(var key in values) {
  if(max === undefined || max < values[key]){
    maxName = key;
    max = values[key];
  }
}

console.log('Max: ' + maxName + ' - ' + values[maxName]);

    var values = { a: 1, b: 2, c: 3 }

    var maxName;
    var max;
    for(var key in values) {
      if(max === undefined || max < values[key]){
        maxName = key;
        max = values[key];
      }
    }
    
    console.log('Max: ' + maxName + ' - ' + values[maxName]);

答案 1 :(得分:2)

在JavaScript中无法轻松检索

Variable个名称。

这样的解决方案也不具备可扩展性。

schema中的调整可以解决此问题。

请注意以下示例中ObjectObject.entries()Array.prototype.reduce()的使用。

// Pairs.
const pairs = {
  a: 1,
  b: 2,
  c: 3
}

// Get Max Pair.
const getmaxpair = (pairs) => Object.entries(pairs).reduce((max, pair) => !max && pair ||  pair[1] > max[1] ? pair : max, false)

// Max Pair.
const [key, value] = getmaxpair(pairs)

// Log.
console.log('max pair:', `${key} ${value}`) // c 3

答案 2 :(得分:1)

您可以使用javascript对象或地图轻松完成此操作

var list = {"a": 1, "b": 2, "c": 3};

var d = Math.max(list.a, list.b, list.c);

// this will return an array: ["a", "b", "c"]
keys = Object.keys(list);

// do a reverse lookup here to find which key your value belongs to
// eg. if list[keys[counter]] == d { your code here }

这是另一种进行反向查找的方法 https://stackoverflow.com/a/9907509/9310329 希望这有帮助

答案 3 :(得分:0)

虽然在现实用例中使用地图(参见其他答案)可以更轻松地实现这一点。 你要求的实际上也是可能的(灵感来自https://stackoverflow.com/a/42791996/7988438

let a = 1;
let b = 2;
let c = 3;

let d = Math.max(a, b, c);


let varToString = varObj => Object.keys(varObj)[0];

if (a == d) {
    console.log(varToString({a}),d)
}
if (b == d) {
    console.log(varToString({b}),d)
}
if (c == d) {
    console.log(varToString({c}),d)
}

相当丑陋,但完成了工作。

答案 4 :(得分:0)

虽然您想到的魔法在某种程度上可能会在对象键上进行迭代,如其他答案中所示,但通常您只需要一个对象数组,其中键已知,并且值会有所不同:

&#13;
&#13;
var persons=[
  {name:  "John", age: 52},
  {name:  "Jane", age: 35},
  {name: "Peter", age: 86},
  {name: "Susan", age: 72}
];

var eldest=persons[0];
persons.forEach(function(person){
  if(person.age>eldest.age)eldest=person;
});
console.log(eldest);
&#13;
&#13;
&#13;