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

时间:2015-12-07 18:51:26

标签: javascript

我正在进行freecodecamp挑战,我想知道为什么我的代码不起作用以及如何纠正它。

目标是“返回由每个提供的子阵列中最大数字组成的数组。”

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

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]]));

目前输出为:[undefined, undefined]

我该如何修复我的代码?

3 个答案:

答案 0 :(得分:7)

map回调中,您应该返回reduce

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

请注意shorter ways of doing that

答案 1 :(得分:4)

有一种更简单的方式

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, innerArray)的结果,因为thisValue在这里不重要,只需传递{{1}很好。

答案 2 :(得分:1)

解决这个问题的另一种方法



function largestOfFour(arr) {
  return arr.map(function(innerArray) {
    // sort innerArray ascending
    return innerArray.sort(function sort(a, b) {
      return a > b;
    }).pop(); // << get the last element (the max)
  });
}

var result = largestOfFour([
  [4, 5, 1, 3],
  [1, 2, 3, 4]
]);
console.log(result);
document.write(result);
&#13;
&#13;
&#13;