从数组的每个子数组返回最大数到新数组

时间:2019-04-25 13:23:30

标签: javascript

我正在做一个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]的数组。

4 个答案:

答案 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用作“数字”,而不是未定义的,如我的第一个发布的解决方案一样。我认为这也清除了一些不必要的代码空间,而且我也喜欢它在逻辑上的工作方式。