Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组的每个子数组中的最大数返回到新数组中_Javascript - Fatal编程技术网

Javascript 将数组的每个子数组中的最大数返回到新数组中

Javascript 将数组的每个子数组中的最大数返回到新数组中,javascript,Javascript,我正在做一个freecodecamp算法脚本问题,我已经尽了我的理解所能。目前的挑战是获取一个包含4个子数组的数组,用javascript搜索,然后返回一个包含每个子数组最大值的新数组。我已经看到了他们的解决方案,并且非常理解它,但我一直在使用嵌套for循环和三元运算符开发自己的解决方案。我将首先显示他们的解决方案,然后是我的错误解决方案,其中表示带参数的函数未定义 代码如下: 他们的解决办法: function largestOfFour(arr) { var results = [];

我正在做一个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;
}

应显示[5,27,39,1001]的数组。

注意:您可以在ES6中使用两行代码来解决此问题。

你可以看看这个工作示例,看看你做错了什么

函数最大四(arr){
//var maxNum=0;
var结果=[];
for(设i=0;imaxNum){
maxNum=arr[i][j];
}
}
否则{
maxNum=arr[i][j];
}
}
结果:push(maxNum);
}
返回结果;
}
log(最大的四个([4,5,1,3],[13,27,18,26],[32,35,37,39],[10001001857,1],-1,-45,-65,-3])
函数最大四(arr){
//var maxNum=0;已更新
var结果=[];
for(设i=0;imaxNum){
maxNum=arr[i][j];
}
}
结果:push(maxNum);
}
返回结果;
}

最大的四个([[2,4,6],[45,56,78])//[6,78]
以下是我在线程中的人员帮助下的解决方案:

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;
}
函数最大四(arr){
var结果=[];
for(设i=0;imaxNum?maxNum=arr[i][j]:删除arr[i][j];
}否则{
maxNum=arr[i][j];
}
}
结果:push(maxNum);
}
返回结果;
}

我回顾了基本算法脚本部分,对问题进行了更彻底的重新检查,以便更好地学习材料。第二次我重新写这篇文章时,我使用了一种非常类似的方法,如果不是完全相同的方法,来解决这个线程中给出的问题。有些事情可能有点不同,所以我想我会发布我的第二个解决方案。同样,可以使用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;
}
函数最大四(arr){
var finalArr=[];
for(设i=0;i最大计数器){
maxCounter=arr[i][j];
}
}
最终推送(最大计数器);
}
返回终局;
}

你可以在这里看到,-Infinity被用作一个“数字”,而不是未定义的,就像我第一次发布的解决方案一样。我认为这也清除了一些不必要的代码空间,而且我也更喜欢它的逻辑工作方式。

在ES6中,您可以执行
array.map(arr=>Math.max(…arr))
您的函数不返回任何内容,因此当函数退出时,您创建的数组将消失。现在还不清楚您在问什么。在这里,您最好使用调试器,逐步完成代码,并观察发生了什么。@Overshower请查看我的答案以获得一些信息idea@Oversought - . 这在其他浏览器中也很相似。谢谢你告诉我如何让我的逻辑线编码出这个算法。我欣赏它,而不是仅仅说我完全错了,并以不同的方式去做。你能解释一下移动定义maxNum的位置是如何将其更改为正确的解决方案的吗?如果他们使用负数,我该如何使其工作?我有一些想法,但不知道如何轻松阐明。显然,设置
var maxNum=0
是这里负数的问题。@Overshow,你必须为每个子数组重置
maxNum
(maxNum=0)(如果子数组包含正数)才能得到该子数组的
maxNum
。我对这个网站感到很困惑。看来有人否决了你的解决方案。那是不对的。这很有效,不是吗?如果子数组中的所有数字都是负数,则不起作用,但我正在使用atm。@我已更新了答案,这也适用于负数……每个youtube视频(浏览量超过1000次)都有不喜欢的计数……我希望你明白我的意思:)是的,我确实错过了。谢谢。:)尽管您的解决方案没有完全起作用。我不知道为什么,希望有人能解释一下。显然,
var maxNum=0
应该放在第一个for循环的开头。我不知道为什么,但这似乎是上面的共识。@超买,是的,我明白了,谢谢你指出。这是因为如果上一个子数组的最大值大于下一个子数组的所有元素,则只会推送上一个最大值。希望你能理解我。我已经更新了answerdope thx,非常感谢,我在下面发布了我的解决方案,这是在大家的帮助下制定的。希望它对人们有用。它可能不是最优雅的,但它遵循了我最初的逻辑和理解,所以这很好。
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;
}
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;
}