当前位置: 首页 > 知识库问答 >
问题:

在由子数组组成的数组中搜索最大的数字并在新数组中返回

吉凯捷
2023-03-14

我正在进行一项编码挑战,获取一个由子数组组成的给定数组,在每个子数组中搜索最大的数字,最后返回一个只包含最大数字的新数组。我的思路是从每个子数组中创建变量,编写一个for循环来比较数组中的每个值,然后将最大值推送到一个新数组中。在编写了我的第一个for循环之后,我测试了我的代码,发现我得到了一个意想不到的结果,整个第一个子数组被压入了我的新数组。在我写下三个循环之前,我在寻找错误。谢谢你。编辑:这是给初学JavaScript的程序员的,建议在你的解决方案中使用比较操作符。

function largestOfFour(arr) {
      var one = arr[0];
      var two = arr[1];
      var three = arr[2];
      var four = arr[3];
      var newArr = [];

      for (var i = 0; i < one.length; i++){
        var oneLrg = 0;
        if (one[i] > oneLrg){
          oneLrg = one[i];
          }
        newArr.push(oneLrg);
      }  

  return arr;
}

console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])); //This test case returns [4,5,1,3] instead of just [5]

共有3个答案

晋涛
2023-03-14

毫无疑问,@Austin汉森和我都在利用同样的学习环境来应对这一挑战:自由代码营。

我自己刚刚经历了这个挑战(FCC称之为“篝火”),我想我会提供一个与@Oriol的“优秀”非常吻合的解决方案

我已经包括了一个关于代码块的特别说明,因为对于我们这些新手(在FCC或其他地方)来说,没有代码块可能会让我们适应几个小时:)

function largestOfFour(arr) {
 var finalArray = [];     
 for(i = 0; i < arr.length; i++) { // iterates through each array
   var max = -Infinity;
   for(j = 0; j < arr[i].length; j++) { // iterates through each sub-array 
      if(arr[i][j] > max) { // comparing each successive element within the sub-array to what is currently stored as max
        max = arr[i][j]; //if the ">" comparison is true then max gets updated
      }  
    }
    finalArray.push(max); // ensure this is OUTside of the j for loop. putting it INside the j for loop returns a very long (and wrong) array. try it. 
  }
  console.log(finalArray);
  return finalArray;
}

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

https://jsbin.com/puweci/edit?js,console

FCC认可以下不利用Array.push()的解决方案。

function largestOfFour(arr) {
  var results = [];
  for (var i = 0; i < arr.length; i++) {
     var max = -Infinity;
     for (var j = 0; j < arr[i].length; j++) {
        if (arr[i][j] > max) {
        max = arr[i][j];
        }
     }

    results[i] = max;
  }

  return results;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]], "");
齐航
2023-03-14

这里的问题是,您在每次循环迭代中都覆盖了oneLrg,并将其放入同一个循环中,因此您将每个值与0进行比较,然后,由于one[i]

试试这个:

var oneLrg = 0;
for (var i = 0; i < one.length; i++){
    if (one[i] > oneLrg){
        oneLrg = one[i];
    }
}
newArr.push(oneLrg);  

濮波
2023-03-14

使用

var newArr = [];
for(var i=0; i<arr.length; ++i) {           // Iterate array
  var maximum = -Infinity;                  // Initial maximum
  for(var j=0; j<arr[i].length; ++j)        // Iterate subarrays
    if(arr[i][j] > maximum)                 // Compare
      maximum = arr[i][j];                  // Update maximum
  newArr.push(maximum);                     // Store the real maximum
}

使用< code>Math.max:

var newArr = [];
for(var i=0; i<arr.length; ++i) {           // Iterate array
  var maximum = -Infinity;                  // Initial maximum
  for(var j=0; j<arr[i].length; ++j)        // Iterate subarrays
    maximum = Math.max(maximum, arr[i][j]); // Update maximum
  newArr.push(maximum);                     // Store the real maximum
}

添加< code >应用:

var newArr = [];
for(var i=0; i<arr.length; ++i)     // Iterate array
  newArr.push(                      // Store ...
    Math.max.apply(Math, arr[i])    // ... the maximum of the subarray
  );

添加埃克马脚本 5 地图,

var newArr = arr.map(function(subarray) {
  return Math.max.apply(Math, subarray);
});

添加弹性体脚本 5 绑定,

var newArr = arr.map(Function.apply.bind(Math.max, Math));

或者添加ECMAScript 6箭头函数和扩展运算符,

var newArr = arr.map(subarray => Math.max(...subarray));
 类似资料:
  • 此请求不使用2D数组。考虑以下结构的1D数组,其中索引从零开始,长度从一开始: 节0是单个单元格的数组。 第1节 null null null null 到目前为止,我使用一个语句的公式只能获得第一节(不是第2节或第3节)。希望找到一组公式来实现目标,而不使用语句或循环。以下是我目前掌握的信息:

  • 问题内容: 假设我们有以下js数组 是否有一个js内置函数或jQuery的一个,使用它可以搜索阵列 AR 的 VAL ? 谢谢 *_ _ _更新 _ _ * _ __** 根据 融合的 反应,我创建了这个原型 问题答案: 您可以创建一个哈希。

  • 问题内容: 从如下所示的数组中,如何获取数组中最大值的索引。对于下面的数组,期望的结果将为‘11’。 问题答案: 我的解决方案是: 注意: 这样,您可以检索与给定 最大值 相关的 每个键 。 __ 如果您只对 其中一个键 感兴趣,只需使用 $ maxs [0]

  • 问题内容: 还有其他方法可以在Postgres的列中搜索某个值吗? 我目前安装的Postgres版本并 没有 让下面的语句: 数组示例: 该语句应返回数组包含的每一行。 问题答案: 对于相等性检查,您可以简单地: 在手册中阅读有关ANY / SOME的信息 。

  • 给出了一个由N个整数组成的数组。 数组的最大和是该数组的非空连续子数组的元素的最大和。 例如,数组[1,-2,3,-2,5]的最大和是6,因为子数组[3,-2,5]的和是6,并且不可能实现更大的子数组和。 现在,您只能从给定数组中删除一个以上的元素。这样做可以得到的结果数组的最大可能最大和是多少? 我正在用我自己的测试用例测试我的代码。我在Dev-C++上得到了正确的输出。但是当我在网上测试我的代

  • 最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。