我在FreeCodeCamp中正在努力完成这项任务,我不知道哪里出错了,为什么结果不是我所期待的。请帮帮我。谢谢!
<!DOCTYPE HTML>
<html>
<head>
<script>
function largestOfFour(arr) { //loop every inside array in the outside array.
var data = []; //storing the output array
for (var x = 0; x < arr.length; x++) {
data[x] = largestOfSingle(arr[x]);
}
console.log(data); // the result should be [27,5,39,1000]
}
function largestOfSingle(myArr) { //find the largest element in every inside array.
if (myArr.length == 1)
return myArr[0];
if (myArr[0] >= myArr[1])
return largestOfSingle(myArr.splice(1, 1));
if (myArr[0] < myArr[1])
return largestOfSingle(myArr.slice(1, myArr.length));
}
</script>
</head>
<body onload="largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);">
<!--two dimensional array-->
</body>
<html>
&#13;
答案 0 :(得分:2)
使用Math.max()这将直接返回最高值。无需编写额外的功能就可以完全实现。
function largestOfFour(arr) { //loop every inside array in the outside array.
var data = []; //storing the output array
for (var x = 0; x < arr.length; x++) {
data[x] = Math.max(...arr[x]);
}
console.log(data); // the result should be [27,5,39,1000]
}
编辑:修复OP解决方案
<!DOCTYPE HTML>
<html>
<head>
<script>
function largestOfFour(arr) { //loop every inside array in the outside array.
var data = []; //storing the output array
for (var x = 0; x < arr.length; x++) {
data[x] = largestOfSingle(arr[x]);
}
console.log(data); // the result should be [27,5,39,1000]
}
function largestOfSingle(myArr) { //find the largest element in every inside array.
if (myArr.length == 1)
return myArr[0];
if (myArr[0] >= myArr[1]) {
myArr.splice(1, 1);
return largestOfSingle(myArr);
}
if (myArr[0] < myArr[1])
return largestOfSingle(myArr.slice(1, myArr.length));
}
</script>
</head>
<body onload="largestOfFour([[ 13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);">
<!--two dimensional array-->
</body>
<html>
&#13;
您会注意到我改变了您使用拼接的方式。你正在做的事情就是你使用了splice的返回值,而不是发送修改过的数组。
来自splice doc:
返回值包含已删除元素的数组。如果只有一个 删除元素,返回一个元素的数组。如果不 删除元素,返回一个空数组。
答案 1 :(得分:2)
问题在于:
if (myArr[0] >= myArr[1])
return largestOfSingle(myArr.splice(1, 1));
Splice返回拼接的东西,而不是原始数组。可以这样做:
if (myArr[0] >= myArr[1]){
myArr.splice(1, 1)
return largestOfSingle(myArr);
}
但在我看来,通过简单的逻辑可以真正简化:
var max = - Infinity;
for(var i = 0; i < myArr.length; i++)
if(myArr[i] > max) max = myArr[i];
return max;
答案 2 :(得分:1)
如果使用递归不是强制性的,你也可以用几行来完成:
myArr.sort(function(a, b){return b - a});
myArr.reverse();
return myArr[0];
答案 3 :(得分:1)
Array.splice()
会返回已删除的项,而不是已修改的数组。相反,您需要在将原始数组传递到递归largestOfSingle()
之前将其拼接,如下所示:
function largestOfSingle(myArr) { //find the largest element in every inside array.
if (myArr.length == 1)
return myArr[0];
if (myArr[0] >= myArr[1])
myArr.splice(1, 1); // splice first
return largestOfSingle(myArr); // pass in modified array
if (myArr[0] < myArr[1])
return largestOfSingle(myArr.slice(1, myArr.length));
}
答案 4 :(得分:0)
蛮力解决方案是手动迭代:
document.addEventListener('error', (e) => {
// do your magic here
}, true)
另一种解决方案,如果允许使用function largestOfFour(arr) {
var largest = [0,0,0,0]; // an array to hold the final result
// brute force all arrays
for(var i = 0; i < arr.length; i++) {
// iterate through sub arrays
for(var j = 0; j < arr[i].length; j++) {
if(arr[i][j] > largest[i]) {
// overwrite old stored largest if the subarray is larger
largest[i] = arr[i][j];
}
}
}
return largest;
}
Math
可以使用function largestOfFour(arr) {
return arr.map(function(subArr) {
return Math.max.apply(null, subArr);
});
}
的第三种解决方案
reduce
答案 5 :(得分:0)
问题只是您在此行中意外写了slice
而不是splice
:
return largestOfSingle(myArr.slice(1, myArr.length));