假设我有四个数组:
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中的最高数字,arr2
,arr3
,{{ 1}},以及密钥2,3等的相同。所以我会arr4
为:
arr5
实现这一目标的最简单方法是什么?
请不 jQuery,只需普通的香草JS。
答案 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.max
(https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Math/max)
使用spread operator
(https://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
的提案。
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;
答案 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);
});