我有一个类似
的数组var arr = [ [1, 4, 5],
[2, 6, 7],
[3, 3, 9]]
我想获得第2列中具有最大值的行,因此在此示例中第2行。如何在javascript中执行此操作?
编辑:我可以使用for循环迭代所有行并使用temp max变量来跟踪最大值。但我希望有一种更有效的方式。
由于
答案 0 :(得分:3)
好吧,迭代并保留一个临时的max变量可能是最有效的方法,但是如果你想要一种看起来更令人愉悦的方法,你可以尝试类似的东西:
var col2 = arr.map(function (elem) {
return elem[1]; //to get all the column 2 values
});
var index = col2.indexOf(Math.max.apply(this, col2));
编辑:如果要使用最后找到的元素的索引,请使用
col2.lastIndexOf(Math.max.apply(this, col2));
答案 1 :(得分:1)
没有什么可以更好的普通循环版本,但你可以像这样使用Array.prototype.reduce
var arr = [ [1, 4, 5], [2, 6, 7], [3, 3, 9]], col = 1;
var best = arr.reduce(function(tillNow, current) {
if (tillNow.best < current[col]) {
tillNow.best = current[col];
tillNow.row = current;
}
return tillNow;
}, {best:0, row:[]});
console.log(best.row); # [ 2, 6, 7 ]
console.log(best); # { best: 6, row: [ 2, 6, 7 ] }
Reduce函数接受until now值作为第一个参数,当前元素作为第二个参数。
对于第一个元素,参数将是这样的
tillNow : {best:0, row:[]} : current: [1, 4, 5]
我们将current
的缩进列与tillNow.best
进行比较。如果当前值大于tillNow
,则最佳元素和当前行将在tillNow
中设置,并且将返回该行并将反馈到reduce
&# 39;下一次迭代为tillNow
。因此,在我们的例子中,在第二次迭代中,值会像这样改变
tillNow : {best:4, row: [1, 4, 5]} : current: [2, 6, 7]
在第三次迭代中,
tillNow : {best:6, row: [2, 6, 7]} : current: [3, 3, 9]
最后结果将是
{ best: 6, row: [ 2, 6, 7 ] }
答案 2 :(得分:1)
此示例在每行上返回运行map
,并返回一个数组,其中包含指定列中每行的编号。然后它返回该数组中最高数字的索引。
function findRowForMaxInCol(arr, col) {
var column = arr.map(function(el) { return el[col]; });
var highest = Math.max.apply(null, column);
return column.indexOf(highest);
}
console.log(findRowForMaxInCol(arr, 1)); // 1
答案 3 :(得分:1)
以下代码会为您提供最高的数字:
var array = [[1, 4, 5],
[2, 6, 7],
[3, 3, 9]];
var bigNum = 0;
for(var i=0;i<array.length; i++){
var largest = Math.max.apply(Math, array[i]);
if(largest > bigNum) {
bigNum = largest;
}
}
console.log(bigNum);
答案 4 :(得分:1)
这个怎么样
var arr = [[1, 4, 5], [2, 6, 7], [3, 3, 9]],
t;
$.each(arr, function(k, v){
t = !t ? v[1] : (v[1] > t ? v[1] : t);
});
console.log(t);
答案 5 :(得分:1)
请试一试。
var col2 = [];
var max = 0;
$.each(arr, function(i, val){
col2.push(val[1]);
})
max = Math.max.apply( Math, col2 );
答案 6 :(得分:0)
只需迭代数组并检查第二个元素是否最大。变量large
将包含行i
和最大值e
。
var arr = [ [1, 4, 5],
[2, 6, 7],
[3, 3, 9]],
large = {i:0, e: 0}; // i: row, e: largest elem
arr.map(function (a, idx) {
if (a[1] > large.e) {
large.e = a[1];
large.i = idx;
}
});
console.log(large); // {i: 1, e: 6}. row: 1 and element 6.
答案 7 :(得分:0)
概括问题:在数组中找到具有最大'f(x)'的元素:
var findMax = function(array, f){
var element = null;
var max = -Infinity;
for (var i=0; i!=array.length; ++i){
var value = f(array[i]);
if (value > max){
element=array[i];
max=value;
}
};
return element;
};
将一般算法应用于rows
,其函数返回行的第二个元素:
var secondElement= function(row){ return row[1]; };
var max = findMax(rows, secondElement);
(JSFiddle)