JavaScript:将多个数组的最高键值组合到一个数组中

时间:2016-03-27 09:56:10

标签: javascript arrays math

假设我有四个数组:

var arr1 = [117, 121, 18, 24];
var arr2 = [132, 19, 432, 23];
var arr3 = [32, 23, 137, 145];
var arr4 = [900, 332, 23, 19];

我需要从这些arr5创建一个新数组,其中键1是arr1的键1中的最高数字,arr2arr3,{{ 1}},以及密钥2,3等的相同。所以我会arr4为:

arr5

实现这一目标的最简单方法是什么?

jQuery,只需普通的香草JS。

5 个答案:

答案 0 :(得分:4)

使用简单的for-loop和Math.max()的解决方案。假设您的数组具有相同的长度:

var arr5 = [];
for (var i = 0; i < arr1.length; i++) {
    arr5.push(Math.max(arr1[i], arr2[i], arr3[i], arr4[i]));
}

答案 1 :(得分:0)

有多种方法可以实现这一目标。 一个人将使用Math.maxhttps://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Math/max

使用spread operatorhttps://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Spread_operator)时,您可以这样做:

arr5.push( Math.max(...arr1) );
arr5.push( Math.max(...arr2) );
// etc..

也许尝试自己如何使用动态数组输入来完成此操作,也许是Math.max调用的一个小包装函数,您可以在其中传递您喜欢的所有数组,并返回仅包含最大值的数组。 / p>

希望它有所帮助。

答案 2 :(得分:0)

这是一个包含两个嵌套Array#forEach的提案。

&#13;
&#13;
var arr1 = [117, 121, 18, 24],
    arr2 = [132, 19, 432, 23],
    arr3 = [32, 23, 137, 145],
    arr4 = [900, 332, 23, 19],
    result = function (array) {
        var r = [];
        array.forEach(function (a) {
            a.forEach(function (b, i) {
                if (!( r[i] > b)) {
                    r[i] = b;
                }
            });
        });
        return r;
    }([arr1, arr2, arr3, arr4]);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 3 :(得分:0)

看看这个解决方案

var arr1 = [117, 121, 18, 24];
var arr2 = [132, 19, 432, 23];
var arr3 = [32, 23, 137, 145];
var arr4 = [900, 332, 23, 19];
var arr5 = [];

Array.prototype.max = function() {
  return Math.max.apply(null, this);
};


for(var i=0; i<4; i++){
   var arr=[arr1[i], arr2[i], arr3[i], arr4[i]];
   var max = Math.max.apply(null, arr);
   arr5.push(max);

}

console.log(arr5);

答案 4 :(得分:0)

我认为您应该使用madox2的解决方案!

那就是说 - 解决问题的一种方法是让你的数组形成一个矩阵,转置该矩阵,并将Math.max映射到结果行上。

这样的事情:

function transpose(m) {
    return m[0].map(function(_, i) {
        return m.map(function(arr) {
            return arr[i];
         });
    });
}
var arr5 = transpose([arr1, arr2, arr3, arr4]).map(function(e) {
    return Math.max.apply(null, e);
});