在JS数组中找到最大的数字并返回变量名称

时间:2019-01-22 04:04:46

标签: javascript

我正在尝试做一些非常简单的事情,但是我无法使其正常工作。我有3个变量:

abc = 123
def = 456
ghi = 789

我创建了这样的数组:

numbers = [abc, def, ghi]

然后我这样做了:

Math.max.apply(null, numbers)

返回789,然后我尝试这样做:

numbers.indexOf(789)

但是它返回2 = ghi的索引,问题是我想精确地找到“ ghi”的名称,我正在挣扎。

4 个答案:

答案 0 :(得分:1)

您还需要将标签存储在数组中。 JavaScript在程序执行期间无法读取您的变量名:

const abc = 123;
const def = 456;
const ghi = 789;

const numbers = [
  {label: 'abc', value: abc},
  {label: 'def', value: def},
  {label: 'ghi', value: ghi}
];

const max = Math.max.apply(null, numbers.map(v => v.value));
console.log(max);

const maxObject = numbers.find(n => n.value === max);
console.log(maxObject.label);

答案 1 :(得分:1)

如果您使用关联数组,则不需要对象。这里是使用数组的示例解决方案

findMax = () => {
  // define the array
  let array = [];
  // filling items to the array
  array['a'] = 123;
  array['b'] = 456;
  array['c'] = 789;

  // variables for max and maxKey
  let max = 0;
  let maxKey = '';
  
  // iterate through the assoc array
  for (var key in array) {
    if(max <= array[key]){
      max = array[key];
      maxKey = key
     }
  }
  console.log('max key ' + maxKey + ' max value ' + max);
}
<input type='button' onclick='findMax()' value='find max' />

答案 2 :(得分:0)

您应该使用Object而不是Array。

const abc = 123;
const def = 456;
const ghi = 789;

const numbers = { abc, def, ghi };
const max = Math.max.apply(null, Object.values(numbers));
const [variableName] = Object.entries(numbers).find(([el, val]) => val === max);

console.log(variableName)

解决方案

Edit max variable name

答案 3 :(得分:0)

由于您具有唯一的值标签,因此我将数据定义为对象。然后,您可以构建一个简单的reducer以将标签和值一起返回:

const numbers = {
  abc: 123,
  def: 456,
  ghi: 789
}

const [label, value] = Object.entries(numbers).reduce((a, b) => a[1] > b[1] ? a : b)
console.log(label, value)

以这种方式存储变量的好处是,您可以简单地通过使用numbers['abc']来通过标签快速访问值。