如何获取浮点数组中最大元素的索引?
[0.000004619778924223204, 0.8323721355744392, 0.9573732678543363, 1.2476616422122455e-14, 2.846605856163335e-8]
获得此索引后,我想在此索引处获取另一个数组的值。
让我们调用第二个数组:
['a', 'b', 'c', 'd', 'e']
当我运行以下内容时,我得到了'b'
而不是'c'
。
我遍历第一个数组,并将浮点数映射到字符串。然后我在第一个数组的第一个元素(浮点数组)中得到了字符串。
//aInput in the array of floats.
var emObj={};
for(var i=0; i<aInput.length; i++){
emObj[aInput[i]]=['a', 'b', 'c', 'd', 'e'][i];
}
return emObj[aInput.sort()[0]];
我还尝试了一种方法,我遍历浮点数组并将最大值存储在变量中。然后我会做这样的事情:
return ['a', 'b', 'c', 'd', 'e'][aInput.indexOf(largestFloat)];
但这些都没有奏效。总是返回错误的字符串。
答案 0 :(得分:5)
我建议使用Math.max()
和indexOf()
var maxNum = Math.max.apply(null, aInput);
var index = aInput.indexOf(maxNum);
return ['a', 'b', 'c', 'd', 'e'][index];
答案 1 :(得分:1)
Array.prototype.reduce()
这允许减少逻辑中的任意复杂性。
首先,设置一些数据:
var data = [0.000004619778924223204, 0.8323721355744392, 0.9573732678543363, 1.2476616422122455e-14, 2.846605856163335e-8];
var reference = ['a', 'b', 'c', 'd', 'e'];
然后,找到数组中最大值的值和索引。
var result = data.reduce(function (previousValue, currentValue, index, array) {
if(previousValue.value > currentValue) {
return previousValue;
} else {
return {value: currentValue, index: index};
}
})
console.log(reference[result.index]);
或者你可以直接找到引用的值。
var result = data.reduce(function (previousValue, currentValue, index, array) {
if(previousValue.value1 > currentValue) {
return previousValue;
} else {
return {value1: currentValue, value2: reference[index]};
}
})
console.log(result);
这会输出Object {value1: 0.9573732678543363, value2: "c"}