如何获取数组中5个最小值的索引?

时间:2019-07-10 12:16:50

标签: javascript arrays

我正在尝试获取数组中5个最小值的索引。

我已经尝试了下面的代码,但是它给出了错误:Math.min.apply(...)。indexOf不是一个函数。我只是不确定我可以用作替代品吗?

var smallest = [];
for (var i = 0, length = distances.length; i < length; i++) {
    var min = Math.min.apply(null,distances).indexOf();
    if (smallest.length <= 5) {
        smallest.push(min);
    }
    console.log(smallest);
}

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以获得键,将它们与值进行排序,并获得前五名。

var indices = [...distances.keys()]
        .sort((a, b) => distances[a] - distances[b])
        .slice(0, 5);

答案 1 :(得分:2)

您可以使用Object.entries()获取[index, value]对,现在可以按值对它们进行排序以获取订单。

const distances = [1, 4, 8, 3, 3, 5, 9, 0, 4, 2];
const indices = Object.entries(distances)
                      .sort(([,a],[,b]) => a - b)
                      .map(([index]) => +index)
                      .slice(0, 5)
console.log(indices);

Nina's version更好:)

答案 2 :(得分:0)

您可以为每个元素添加索引,以升序对数据进行排序,然后拼接前5个值:

const data = [1, 4, 8, 3, 3, 5, 9, 0, 4, 2]

const indices = data.map((e,i) => [e, i])
  .sort()
  .splice(0,5)
  .map(([,el]) => el)

console.log(indices)