我正在尝试获取数组中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);
}
谢谢!
答案 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)