我正在尝试做一些非常简单的事情,但是我无法使其正常工作。我有3个变量:
abc = 123
def = 456
ghi = 789
我创建了这样的数组:
numbers = [abc, def, ghi]
然后我这样做了:
Math.max.apply(null, numbers)
返回789,然后我尝试这样做:
numbers.indexOf(789)
但是它返回2 = ghi的索引,问题是我想精确地找到“ ghi”的名称,我正在挣扎。
答案 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)
解决方案
答案 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']
来通过标签快速访问值。