繁体   English   中英

Javascript筛选器功能未返回数组

[英]Javascript filter function not returning array

函数从每个子数组返回最大元素的数组


function largestOfFour(arr) {
      var max = 0;
      var newarr = [];
      newarr = arr.filter(function(elem) {
          max= 0;
          for(var i=0;i<elem.length;i++) {
            if(max<elem[i]) {
              max = elem[i];
            }
          }  
          return max;
        });
      return newarr;
    }

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

filter功能实际上并非如此。 function你进入filter需要返回布尔: true如果给定的元素应该留在生成的Array,并false如果它应该被删除。 由于返回的是max ,它是一个Number ,所以任何非零值都将被解释为true ,因此该元素将保留在Array中。

您可以尝试编写一个对数组进行排序并获取第一个元素(或最后一个,取决于排序方向)的max函数,然后将该函数map到四个数组的Array上。

正如erictgrubaugh所说,“过滤器”不能像这样工作,这是为您提供的文档: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

var filtered = [12, 5, 8, 130, 44].filter(function(val){
  return val >= 10;
});
// filtered is [12, 130, 44]

为了完整起见,在ES6中一行使用Array#mapMath.max传播语法...的解决方案。

 const largestOfFour = array => array.map(a => Math.max(...a)); console.log(largestOfFour([[4, 5000, 1, 3], [13, 27, 18, 26], [3, 35, 37, 39], [1000, 1001, 857, 1]])); 

您可以使用以下程序在所有子数组中找到larget元素

function largest(arr){
    var out=[];
    for(var i=0;i<arr.length;i++){
        var max=Number.MIN_VALUE;
        for(var j=0;j<arr[i].length;j++){
            max=Math.max(max,arr[i][j]);
        }
        out.push(max);
    }
    return out;
}

filter不会执行您要执行的操作。 它只是选择是否接受该元素。

您需要的是map 它对数组的每个元素执行操作。

这是一个解决方案-

 function largestOfFour(arr) { var newarr = []; newarr = arr.map(function(elem){ return Math.max(...elem); }); return newarr; } console.log(largestOfFour([[4, 5000, 1, 3], [13, 27, 18, 26], [3, 35, 37, 39], [1000, 1001, 857, 1]])); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM