我想找到数组最小值的索引。
E.g。
var array = [1,2,3,4,1,7,8,9,1];
var min = Math.min.apply( Math, array )
var key = array.indexOf(min);
问题是Math.min.apply只返回第一个索引
min = 1且key = 0
我想做的是返回
min = 1 and key = [0,4,8];
是否可以使用Math.min.apply执行此操作?
答案 0 :(得分:0)
var array = [1,2,3,4,1,7,8,9,1];
function findMinimumIndexes(array) {
var min = Math.min.apply(Math, array);
var indexes = [];
array.forEach(function(item, idx, arr) {
if (item === min) {
indexes.push(idx);
}
});
return indexes;
}
console.log(findMinimumIndexes(array));
该函数声明变量indexes
并为其分配一个空数组,然后使用带有元素'的forEach
调用填充该数组。值与min
匹配的索引。
请注意,这仅适用于原始值,因为它使用===
来检查等效性。
使其适用于非常平等的数组或对象。对于您正在寻找的那个,您需要更严格的实施。
答案 1 :(得分:0)
var array = [1,2,3,4,1,7,8,9,1];
var min = Math.min.apply( Math, array )
var arrayWithIndex = array.map(function(element, index) {
return element + "-" + index;
});
var minValues = arrayWithIndex.filter(function(element) {
return Number(element.split('-')[0]) === min;
});
var keys = minValues.map(function(element) {
return Number(element.split('-')[1]);
});
我的算法是将原始数组映射到包含一个包含数字和索引的新数组。我然后过滤该数组的元素,其中数字等于min,然后再次映射以找到索引。
您也可以链接这些方法
return array.map(function(element, index) {
return element + "-" + index;
})
.filter(function(element) {
return Number(element.split('-')[0]) === min;
}).
.filter(function(element) {
return Number(element.split('-')[1]);
});
答案 2 :(得分:0)
Array.prototype.reduce
应该开展工作。
var array = [1, 2, 3, 4, 1, 7, 8, 9, 1];
function getMinKeys(array) {
var min = Math.min.apply(Math, array);
return array.reduce(function (r, a, i) {
a === min && r.push(i);
return r;
}, []);
}
document.write('<pre>' + JSON.stringify(getMinKeys(array), 0, 4) + '</pre>');