嵌套for循环后返回结果

时间:2017-11-22 12:28:17

标签: javascript arrays loops break

我正在试图找出如何使用下面的代码将largestNumber变量推送到largestNumbers变量,以便maximumOfFour的每个子数组中的最大数字将作为maximumNumbers数组返回。

我在精神上看到它,并认为我正在编写代码。这是我的思考过程:

1)maximumNumbers被设置为空数组。

2)创建一个for循环,在循环期间拉出每个子数组并将其存储为PulledSubArray。

3)我需要遍历子阵列(拉出 SubArray)带有for循环。

4)设置maximumNumber变量以存储子数组中的最大数字,并设置if语句以确定哪个数字最大,然后将该数字推送到largestNumbers数组。

5)打破内部for循环,然后重复第二个子数组的步骤。

如果没有给出整个挑战的答案,你能否告诉我为实现最终结果我缺少哪些语法或元素

function largestOfFour(arr) {

  var largestNumbers = [];

  for (var i = 0; i > arr.length; i++){

   var pulledSubArray = arr[i];

    for (var n = 0; n > pulledSubArray.length; n++){

      var biggestNumber = 0;

      if (pulledSubArray[n] > biggestNumber){

        biggestNumber = pulledSubArray[n];

      } else if (pulledSubArray[n] < biggestNumber){

        largestNumbers.push(biggestNumber);
        break;

      }         
    }           
  }                              

 return largestNumbers;

}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

3 个答案:

答案 0 :(得分:0)

如果你想获得每个子数组中最大的数字:

var data = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];

function largestOfFour(data) {
  return data.map(function(d) {
    return Math.max.apply(null, d)
  })  
}

console.log(largestOfFour(data))

甚至更短(es6):

let data = [[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]];

const largestOfFour = data => data.map(d => Math.max.apply(null, d))

console.log(largestOfFour(data))

答案 1 :(得分:0)

for (var i = 0; i > arr.length; i++){
                  ^
             Wrong condition

你的循环结构是错误的。纠正他们。函数的简单版本看起来像(ECMAScript6)

const largestOfFour = (arr) => arr.map(el => Math.max(...el));

如果您想坚持自己的想法

&#13;
&#13;
function largestOfFour(arr) {
  var largestNumbers = [];
  for (var i = 0; i < arr.length; i++) {    // Correct loop condition
    var pulledSubArray = arr[i];
    var biggestNumber = pulledSubArray[0];
    for (var n = 1; n < pulledSubArray.length; n++) {    // Correct loop condition
      if (pulledSubArray[n] > biggestNumber) {
        biggestNumber = pulledSubArray[n];
      }
    }
    largestNumbers.push(biggestNumber);    // Push biggest number outside the inner loop
  }
  return largestNumbers;
}

console.log(largestOfFour([
  [4, 5, 1, 3],
  [13, 27, 18, 26],
  [32, 35, 37, 39],
  [1000, 1001, 857, 1]
]));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

问题在于代码:

  1. <强>逻辑
  2. if (pulledSubArray[n] > biggestNumber) {
      biggestNumber = pulledSubArray[n];
    } else if (pulledSubArray[n] < biggestNumber) {
      largestNumbers.push(biggestNumber);
      break;
    }
    

    对于数组[4, 5, 1, 3],对于第二次迭代,biggestNumber持有4pulledSubArray[n]将持有5。对于这种情况,你是否会推动该值并打破循环。但是你没有检查整个阵列。所以你不会得到准确的结果。

    1. 循环条件
    2. for (var i = 0; i > arr.length; i++){
      

      这永远不会进入循环。它应该是i < arr.length

      1. 变量声明
      2. for (var n = 0; n > pulledSubArray.length; n++) {
          var biggestNumber = 0;
          if (pulledSubArray[n] > biggestNumber) {
        

        变量应在循环外声明。您当前正在每次迭代中将其值设置为0。因此,您最终会获得最后一个值,因为if (pulledSubArray[n] > biggestNumber)将始终返回true。

        更新代码:

        function largestOfFour(arr) {
          var largestNumbers = [];
          for (var i = 0; i < arr.length; i++) {
            var pulledSubArray = arr[i];
            var biggestNumber = 0;
            for (var n = 0; n < pulledSubArray.length; n++) {
              if (pulledSubArray[n] > biggestNumber) {
                biggestNumber = pulledSubArray[n];
              }
            }
            largestNumbers.push(biggestNumber)
          }
          return largestNumbers;
        }
        
        var list = largestOfFour([
          [4, 5, 1, 3],
          [13, 27, 18, 26],
          [32, 35, 37, 39],
          [1000, 1001, 857, 1]
        ]);
        
        console.log(list)