Javascript如何使用高阶函数和Map/Reduce函数来汇总多个数组

Javascript how to use High order functions and Map/Reduce function to sum up multiple arrays

本文关键字:函数 数组 Reduce 何使用 高阶 Map Javascript      更新时间:2023-09-26

我想将两个数组组合起来,将每个元素或数组相加,并返回结果数组。我正在练习高阶函数,尽管这很容易解决,但我更倾向于寻求更高阶函数的建议。像这样的东西:

var a=[1,2,3], b=[7,8,9]; 
func(a,b);// should return [8,10,12];

我需要更优雅地使用高阶函数,所以不能使用一个简单的循环来添加每个元素。我知道Map/Reduce函数可以应用于1D数组,但在数组之间呢?有什么优雅的实现吗?

我的努力:

var arr=[a,b];
var toReturn=arr[0].map(function(_, i) {
    return arr.reduce(function(max, row) {
      return max+row[i];
    }, 0);
  });

我知道它比应该的更复杂,但我正在努力学习更高阶的函数。

我想我知道你想要什么,但在我的例子中,对所有事情使用高阶函数也是过分的。在这里,我们创建了类似于[].map的map2,但需要2个数组和一个至少需要2个参数的函数。我建议学习更多关于地图缩减的知识,因为在这里你根本不需要缩减。

<script>
function sum (a,b) {
    return a + b;
}
function map2 (array1, array2, function1) {
    /*not fully tested*/
    var length1 = array1.length,
        length2 = array2.length,
        i,
        array3 = new Array(length1);
    for (i = 0; i < length1 && i < length2; i++) {
        array3[i] = function1(array1[i], array2[i], i);
    }
    return array3;
}
function sumArrays (array1, array2) {
    return map2(array1, array2, sum);
}
var a=[1,2,3], b=[7,8,9]; 
console.log(sumArrays(a,b));
console.log(sumArrays(a,sumArrays(a,b)))
</script>

为什么要让它变得比需要的更复杂?以下内容完全符合您的要求:

function func(a,b) {
    var result = [];
    for(var i=0; i<a.length && i<b.length; i++)
    {
        result[i] = a[i] + b[i];
    }
    return result;
}

你说:"我需要更优雅地使用高阶函数,所以不能使用一个简单的循环来添加每个元素。"但你没有给出令人信服的理由,也没有给出任何例子来证明更复杂的解决方案是合理的。