我正在进行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]
我该如何修复我的代码?
答案 0 :(得分:7)
在map
回调中,您应该返回reduce
:
function largestOfFour(arr) {
return arr.map(function(innerArray){
return innerArray.reduce(function(previousValue,currentValue){
return currentValue > previousValue ? currentValue : previousValue;
});
});
}
答案 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;