Javascript如何使用高阶函数和Map/Reduce函数来汇总多个数组
Javascript how to use High order functions and Map/Reduce function to sum up multiple arrays
我想将两个数组组合起来,将每个元素或数组相加,并返回结果数组。我正在练习高阶函数,尽管这很容易解决,但我更倾向于寻求更高阶函数的建议。像这样的东西:
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;
}
你说:"我需要更优雅地使用高阶函数,所以不能使用一个简单的循环来添加每个元素。"但你没有给出令人信服的理由,也没有给出任何例子来证明更复杂的解决方案是合理的。
相关文章:
- 使用jQuery浏览函数数组
- coffescript/javascript函数数组的行为真的很奇怪
- 返回多个变量的 JavaScript 函数:数组与对象.最佳实践是什么
- 如何在 JavaScript 中动态地编写可迭代的函数数组
- JavaScript 自包含函数数组访问自我索引
- 如何在javascript中调用函数数组的索引号
- 从外部函数(数组)了解返回函数(x)
- Javascript函数数组
- 引用函数数组中的另一个函数
- 文本框搜索/Javascript函数数组**不对应**
- 返回一个函数数组
- selenium-webdriver 将函数数组作为参数传递给 executeScript
- 70%的时间运行JavaScript函数,从函数数组中随机选择
- 如何循环函数数组并在单击时一次执行一个
- 如何在 Javascript 命名空间脚本中创建函数数组
- 创建函数数组
- 在 Jscript 中为 Q.all() 构建一个动态函数数组
- 打印函数数组的函数名称
- 循环遍历函数数组 - 对象不支持此属性或方法 (IE8)
- 将函数数组传递给另一个函数