数组中最大浮点数的索引

5

如何获取浮点数数组中最大元素的索引?

[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)];

但是这两个方法都不起作用,总是返回错误的字符串。
2个回答

5

我建议使用Math.max()indexOf()

var maxNum = Math.max.apply(null, aInput);
var index = aInput.indexOf(maxNum);
return ['a', 'b', 'c', 'd', 'e'][index];

2

使用Array.prototype.reduce()的一种方法

这允许在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"}

谢谢,我甚至不知道reduce这个函数。 - wordSmith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接