我正在做一个freecodecamp算法脚本问题,我已经尽我所能。面临的挑战是采用一个充满4个数字子数组的数组,使用javascript搜索它,然后返回一个具有每个子数组最大值的新数组。我已经看过他们的解决方案并对此有很好的理解,但是我一直在使用嵌套的for循环和三元运算符来开发自己的解决方案。首先显示他们的解决方案,然后显示我的错误解决方案,即有参数的函数未定义。
下面是代码:
他们的解决方案:
function largestOfFour(arr) {
var results = [];
for (var n = 0; n < arr.length; n++) {
var largestNumber = arr[n][0];
for (var sb = 1; sb < arr[n].length; sb++) {
if (arr[n][sb] > largestNumber) {
largestNumber = arr[n][sb];
}
}
results[n] = largestNumber;
}
return results;
}
我正在研究的解决方案(当前不起作用):
function largestOfFour(arr) {
var maxNum = 0;
var results = [];
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
arr[i][j] > maxNum ? results.push(arr[i][j]) : delete arr[i][j];
}
}
}
例如
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
应显示[5,27,39,1001]的数组。
答案 0 :(得分:1)
function largestOfFour(arr) {
//var maxNum = 0; updated
var results = [];
for (let i = 0; i < arr.length; i++) {
var maxNum = -Infinity; //updated
for (let j = 0; j < arr[i].length; j++) {
if(arr[i][j] > maxNum){
maxNum = arr[i][j];
}
}
results.push(maxNum);
}
return results;
}
largestOfFour([[2,4,6],[45,56,78]]); //[6, 78]
嘿,您可以这样修改它。您可能错过了更新maxNum的操作,并且在innerLoop结束后,我们可以在结果数组中推送最大值。
答案 1 :(得分:0)
注意:您可以使用ES6中的两行代码来解决此问题
您可以看到这个工作示例,以了解您在哪里做错了,
function largestOfFour(arr) {
//var maxNum = 0;
var results = [];
for (let i = 0; i < arr.length; i++) {
var maxNum = null;
for (let j = 0; j < arr[i].length; j++) {
//You can use ternary operator here
if (maxNum) {
if (arr[i][j] > maxNum) {
maxNum = arr[i][j];
}
}
else {
maxNum = arr[i][j];
}
}
results.push(maxNum);
}
return results;
}
console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1], [-1, -45, -65, -3]]));
答案 2 :(得分:0)
这是我的解决方案,可以帮助人们:
function largestOfFour(arr) {
var results = [];
for (let i = 0; i < arr.length; i++) {
var maxNum = undefined;
for (let j = 0; j < arr[i].length; j++) {
if (maxNum) {
arr[i][j] > maxNum ? maxNum = arr[i][j] : delete arr[i][j];
} else {
maxNum = arr[i][j];
}
}
results.push(maxNum);
}
return results;
}
答案 3 :(得分:0)
我回顾了“基本算法脚本”部分,以更彻底地重新检查问题,以便更好地学习材料。第二次我重新编写此代码时,最终还是使用了与该线程中给出的解决方案非常相似(即使不是完全相同)的方法。有些事情可能有所不同,所以我想我应该发布第二个解决方案。同样,可以使用ES6在两行代码中解决此问题,但这并不那么有趣。 :)
解决方案:
function largestOfFour(arr) {
var finalArr = [];
for (let i = 0; i < arr.length; i++) {
var maxCounter = -Infinity;
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j] > maxCounter) {
maxCounter = arr[i][j];
}
}
finalArr.push(maxCounter);
}
return finalArr;
}
您可以在此处看到-Infinity用作“数字”,而不是未定义的,如我的第一个发布的解决方案一样。我认为这也清除了一些不必要的代码空间,而且我也喜欢它在逻辑上的工作方式。