查找比较每个索引的多个数组的最大值

时间:2014-11-25 00:39:07

标签: javascript arrays node.js

我试图找到一种方法来找到最大值,比较数组中每个观察的多个(未知数,但相同长度)数组,返回一个具有最大值的数组。

示例:

修改

 A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2], etc......]

返回

MAX = [2.2, 5.3, 5.2]

能够检查输入的数组是否具有相同的长度,但无法比较找到最大数据的数组....

6 个答案:

答案 0 :(得分:4)

您可以使用Array.reduce()

    var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];
    
    var max = A.reduce(function(final, current) {
      for (var i = 0; i < final.length; ++i) {
        if (current[i] > final[i]) {
          final[i] = current[i];
        }
      }
      return final;
    });
    
    console.log(max);

内部函数将当前最大值与下一个数组元素进行比较,因此final始终保持到目前为止遍历的所有元素的最大值。

答案 1 :(得分:2)

对于数组的每个索引,创建一个包含“column”中所有元素的数组,并找到这些值的最大值。返回生成的数组。样本用法:maxValues(A)会得到所需的结果。

function maxValues(array) {
    var maxArray = [];
    var length = array[0].length;
    for (var i = 0; i < length; i++) {
        var ithColumn = [].map.call(array, function(array) {
            return array[i];
        });
        maxArray.push(Math.max.apply(null, ithColumn));
    }
    return maxArray;
}

答案 2 :(得分:2)

var data = [
    [2.2, 3.3, 1.3],
    [1.2, 5.3, 2.2],
    [0.3, 2.2, 5.2]
];

function maxAtIndex (data) {
    //output
    var maxArray = [];
    //loop arrays passed in
    for (var i = 0; i < data[0].length; i++) {
        var possibleValues = [];
        //get value in array at index
        for (var j = 0; j < data.length; j++) {
            possibleValues.push(data[j][i]);
        }
        //get the highest from possible values
        var highest = Math.max.apply(null, possibleValues);
        //store in output array
        maxArray.push(highest);
    }
    return maxArray;
};

console.log(maxAtIndex(data)); //[ 2.2, 5.3, 5.2 ]

答案 3 :(得分:1)

您可以结合使用Lo-Dash的zipmap方法,只需几行代码即可完成此操作:

var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];

// Creates an array of arrays, where the first array is all the first elements,
// the second array is all the second elements, etc.
var zipped = _.zip(A);
var maxes = _.map(zipped, function(arr) {
    return _.max(arr);
});
console.log(maxes);

答案 4 :(得分:1)

这是一个简短而甜蜜的版本:

var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];

var maxA = A.map(a => Math.max.apply(null, a));

答案 5 :(得分:0)

我拿了Tom Panning's answer并进一步简化了它:

var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];
var MAX = _.zip.apply(null, A).map(_.max);
相关问题