Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组的数组上使用map()中的reduce()_Javascript - Fatal编程技术网

Javascript 在数组的数组上使用map()中的reduce()

Javascript 在数组的数组上使用map()中的reduce(),javascript,Javascript,我正在处理一个freecodecamp挑战,我想知道为什么我的代码不工作,以及如何纠正它 目标是“返回一个数组,该数组由每个提供的子数组中的最大数组成。” 我尝试使用reduce作为映射函数映射输入数组: function largestOfFour(arr) { arr = arr.map(function(innerArray){ innerArray = innerArray.reduce(function(previousValue,currentValue){

我正在处理一个freecodecamp挑战,我想知道为什么我的代码不工作,以及如何纠正它

目标是“返回一个数组,该数组由每个提供的子数组中的最大数组成。”

我尝试使用reduce作为映射函数映射输入数组:

function largestOfFour(arr) {
    arr = arr.map(function(innerArray){
       innerArray = innerArray.reduce(function(previousValue,currentValue){
           return currentValue > previousValue ? currentValue : previousValue;
       });
    });
    return arr;
}

console.log(largestOfFour([[4, 5, 1, 3],[1, 2, 3, 4]]));
当前输出为:
[未定义,未定义]


如何修复代码?

map
回调中,您应该返回
reduce
的结果:

function largestOfFour(arr) {
  return arr.map(function(innerArray){
    return innerArray.reduce(function(previousValue,currentValue){
      return currentValue > previousValue ? currentValue : previousValue;
    });
  });
}
注意有。

有一个更简单的方法

function largestOfFour(arr) {
    return arr.map(function(innerArray) {
      return Math.max.apply(null, innerArray);
    });
}
Math.max
可以用多个参数调用,如
Math.max(3,4,5,6)
将返回
6

使用
apply
我们可以将参数数组传递给函数,如
中所示。apply(thisValue,[3,4,5,6])
并执行相同的操作


由于有一个数组,我们可以映射外部数组,并返回
Math.max.apply(thisValue,innerray)
的结果,并且由于
thisValue在这里不重要,只需传递
null
就可以了。

还有另一种解决方法

函数最大四(arr){
返回arr.map(函数(innerArray){
//按升序对内部数组排序
返回innerArray.sort(函数排序(a,b){
返回a>b;

}).pop();//您正在分配给
innerArray
,但没有返回任何内容。太好了,谢谢!这确实清除了数组函数的工作方式。选择此选项是正确的,因为它回答了我的特定问题,即使我原来的方法不是最好的方法。谢谢,我在使用Math.max和map()时遇到困难,所以我选择了reduce()路线。这为将来清理了它。