返回数组中最大值的索引
Return indexes of greatest values in an array
我想要一个返回数组最大值的函数。我知道这个问题被问了很多次,但是在一个数组中我们有多个最大值的情况下呢?假设我们的数组看起来像这样:
var arr = [1,10,2,10];
功能:
arr.indexOf(Math.max.apply(Math, arr) );
将只返回索引 1,但我想得到 1 和 3。
什么是最短和最有效的方法。
const largest = Math.max(...arr);
arr.reduce((indexes, n, index) => {
return indexes.concat(n === largest ? [index] : []);
}, []);
或者,如果 ES5 是你的一杯茶:
var largest = Math.max.apply(Math, arr);
arr.reduce(function(indexes, n, index) {
return indexes.concat(n === largest ? [index] : []);
}, []);
或者,如果你喜欢泛型函数:
function findAllIndexes(arr, val) {
return arr.reduce((indexes, element, index) => {
if(element === val) {
return indexes.concat([element]);
} else {
return indexes;
}
}, []);
}
findAllIndexes(arr, Math.max(..arr));
"手动"方式:
var getIndicesOfHighest = function(arrIn) {
var indices = [];
var highest = arrIn[0];
for (var el=1; el<arrIn.length; el++) {
if(arrIn[el] > highest) {
highest = arrIn[el];
indices = [];
indices.push(el);
} else if ( arrIn[el] == highest) {
indices.push(el);
}
}
return indices;
}
这将起作用:
var arr = [1,10,2,10],
indices = [],
highest = Math.max.apply(Math, arr);
arr.forEach(function(val, index){
if (val === highest) indices.push(index);
});
console.log(indices.join(','));
你可以使用它。
var arr = [1,10,2,10];
var ind = [];
var highValue = Math.max.apply(Math, arr);
arr.map(function(x, i) {
if (x == highValue) {
ind.push(i)
}
});
console.log(ind);//output is [1,3]
var highestIndexes = [];
$.each(arr,function(index,item){
item== Math.max.apply(Math, arr) ? highestIndexes.push(index) : $.noop();
});
console.log(highestIndexes);
试试这个
只是为了完整起见,一个带有Array#reduce()
的提案
var arr = [1, 10, 2, 10],
max = arr.reduce(function (r, a, i, aa) {
if (!i || a > aa[r[0]]) {
return [i];
}
if (a === aa[r[0]]) {
r.push(i);
}
return r;
}, []);
document.write('<pre>' + JSON.stringify(max, 0, 4) + '</pre>');
使用 underscore/lodash 和 _.reduce 你可以编写一个方法,根据你传入的任何条件来查找所有索引。
喜欢:
function findAllIndexes(_arr, condition) {
return _.reduce(_arr, function(arr, o, index) {
if(condition(o, _arr)) arr.push(index);
return arr;
}, []);
}
console.log(findAllIndexes(nums, function(o, arr){
return o === Math.max.apply(Math, arr);
}));
同样的方法可以与对象文本数组一起使用,无论您给它什么条件
喜欢
var users = [
{ 'user': 'barney', 'active': true },
{ 'user': 'barney', 'active': false },
{ 'user': 'bob', 'active': false }
];
console.log(findAllIndexes(nums, function(o, arr){
return o.user == 'barney' && o.active == false;
}));
http://jsbin.com/jadesayicu/edit?html,js,console,output
相关文章:
- 在Javascript数组中查找绝对最大值
- Html5输入属性的默认值,如最小值、最大值、大小等
- 按最大值获取数组索引
- 识别滑块范围的最小值和最大值
- 如何在最大值之前的某个点停止范围滑块
- 访问Highcharts系列的最小/最大值:afterSetExtremes不会激发
- 如何在拖动后获得图表的最小值和最大值放大高图表
- AngularJs:在数字输入字段中设置验证的条件最小值和最大值
- HTML5范围滑块最小值和最大值
- 如何仅在存在最小值和最大值时才显示错误消息
- 在 JavaScript 事件中添加最小值和最大值
- 从 JavaScript 中的数组中获取最大值和最小值
- 获取整数对象属性名称的最小值和最大值
- 高图表 - 在缩放重置中设置最大值和最小值
- Java 脚本 设置日期的最小值和最大值属性
- 使用javascript动态更改select中的最大值
- 返回数组中最大值的索引
- 返回数组中最大值的索引
- 如何在对象数组中获得最大值的索引
- 我怎么能找到一个数组的最大值的所有索引在javascript