14

我想要实现的是在数组中找到最小的数字及其初始位置。这是一个应该做什么的例子:

temp = new Array();
temp[0] = 43;
temp[1] = 3;
temp[2] = 23;

所以最后我应该知道第 3 位和第 1 位。我也看过这里:从 Javascript 中的数组中获取最小值?,但是这种方式并没有给我在数组中的数字位置。感谢任何提示或代码片段。

4

7 回答 7

15

只需遍历数组并查找最小的数字:

var index = 0;
var value = temp[0];
for (var i = 1; i < temp.length; i++) {
  if (temp[i] < value) {
    value = temp[i];
    index = i;
  }
}

现在value包含最小值,并index包含数组中存在此类值的最低索引。

于 2013-03-16T22:09:19.217 回答
7

你想用indexOf

http://www.w3schools.com/jsref/jsref_indexof_array.asp

使用您之前拥有的代码,来自另一个问题:

temp = new Array();
temp[0] = 43;
temp[1] = 3;
temp[2] = 23;

Array.min = function( array ){
    return Math.min.apply( Math, array );
};

var value = temp.min;
var key = temp.indexOf(value);
于 2013-03-16T22:09:48.690 回答
6

单线:

alist=[5,6,3,8,2]

idx=alist.indexOf(Math.min.apply(null,alist))
于 2017-06-07T16:54:26.110 回答
1

请参阅此问题的“查找最大值”版本的答案。它既简单又好。之后您可以使用索引来获取元素。

于 2017-11-11T06:39:47.970 回答
1

您可以使用 reduce,并与Infinity.

let minIndex = -1;
arr.reduce((acc, curr, index) => {
    if (curr < acc) {
        minIndex = index;
        return curr;
    } else {
        return acc;
    }
}, Infinity);
于 2020-10-19T18:26:20.407 回答
1

Math.min使用和 展开运算符求最小值:

var minimumValue = Math.min(...temp);

然后使用以下方法查找索引indexOf

var minimumValueIndex = temp.indexOf(minimumValue);

我个人更喜欢扩展运算符而不是apply.

于 2021-05-28T13:34:37.137 回答
0

这是使用简单递归的解决方案。输出是一个包含最小数的索引位置和最小数本身的对象

const findMinIndex = (arr, min, minIndex, i) => {
  if (arr.length === i) return {minIndex, min};
  if (arr[i] < min) {
    min = arr[i]
    minIndex = i;
  }
  return findMinIndex(arr, min, minIndex, ++i)

}

const arr = [5, 5, 22, 11, 6, 7, 9, 22];
const minIndex = findMinIndex(arr, arr[0], 0, 0)
console.log(minIndex);

于 2019-10-02T21:55:29.580 回答