【问题标题】:Javascript - Returning a multidimensional array and for loops [duplicate]Javascript-返回多维数组和for循环[重复]
【发布时间】:2015-11-24 03:51:14
【问题描述】:

我觉得我快要得到这个了,所以只是一个提示就可以了。 :) 这是代码,然后是我的问题:

function largestOfFour(arr) {
  var matrix = arr;
  var longestNum = 0;
  for (var i = 0; i < matrix.length; i++) {
      for (var j = 0; j < matrix.length; j++)

      if (longestNum < matrix[i][j]) {
          longestNum = matrix[i][j];
      }

      return longestNum; // returns highest value in first sub array       
      //console.log(matrix[i][j]);
  }
      //return longestNum;  //returns highest value in fourth sub array  

}

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

代码需要:返回一个由每个提供的子数组中的最大数组成的数组。在这一点上,我的猜测是类似于下面的代码,还是我离题了?这是修改后的代码:

function largestOfFour(arr) {
  var matrix = arr;
  var longestNum = 0;
  for (var i = 0; i < matrix.length; i++) {
      for (var j = 0; j < matrix.length; j++)

      if (longestNum < matrix[i][j]) {
          longestNum = matrix[i][j];
          newArr = [];
            for (var k = 0; k < matrix.length; k++) {
                newArr += longestNum;
            }

      }

      //return [newArr]; // returns highest value in first sub array       
      //console.log(matrix[i][j]);
  }
      return [newArr];  //returns highest value in fourth sub array  

}

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

我放了 return 语句来查看它返回了什么,它显示了第一个和最后一个最大的数字,所以我只需要返回所有这些。

呃,编码太难了! :D

【问题讨论】:

  • 你只需要保存行索引然后返回matrix[rowindex]。您还可以为您的示例数据提供预期的输出吗?
  • 好的,让我试试。谢谢!我猜样本输出是:[5, 27, 39, 1001]
  • 如果您希望 [1000, 1001, 857, 1] 作为您的样本的输出,则此工作,如果不是 - 提供预期的输出

标签: javascript


【解决方案1】:

在您的第一个解决方案中,您在内部 for 循环的末尾编写了 return 语句。这将打破 for 循环并返回第一个子数组中的最大元素。

以下是您的问题的解决方案。只需对您的代码稍作修改,它就可以正常工作。

function largestOfFour(arr) {
    var matrix = arr;
    var longestNum = 0;
    var longestArray = [];
    for (var i = 0; i < matrix.length; i++) {
        longestNum = 0;
        for (var j = 0; j < matrix[i].length; j++){
          if (longestNum < matrix[i][j]) {
              longestNum = matrix[i][j];
          }
        }
        longestArray.push(longestNum); // push highest value in first sub array       
   }
   return longestArray;
}

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

【讨论】:

  • 哇!谢谢你。我是如此接近却又如此遥远。我对push 不太熟悉,所以我想我需要更好地了解它。再次感谢。
  • 这就是我告诉你的。您实际上非常接近解决方案。 push 只不过是在数组的末尾添加新元素。是的,如果这对你有用,那么请把它作为公认的答案。谢谢和欢迎:)
  • 嘿,检查一下这个更新的代码,好像你的数组是相反的,以前的代码不能正常工作。
【解决方案2】:

好的,这里有一些问题:

首先,您的嵌套循环应该使用matrix[i].length 而不是matrix.length(您的数组大小可能不相等,并且可能不等于顶级数组的长度,例如:[[0,1,2,3,4],[3,8],[100,4,1]])。

其次,您的第三个循环不是必需的。正如@Grundy 所说,您只需在 if 条件中将rowindex 设置为等于i 即可返回

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2017-03-07
    • 2012-11-21
    • 2014-07-02
    • 2015-06-12
    • 2016-11-09
    相关资源
    最近更新 更多