Javascript过滤函数不返回数组

时间:2017-04-09 05:23:29

标签: javascript arrays filter

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

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]]);

5 个答案:

答案 0 :(得分:3)

这并不是filter函数的工作原理。传入function的{​​{1}}需要返回一个布尔值:filter如果给定的元素应该保留在生成的数组中,true则应该删除它。由于您要返回false max,因此任何非零值都将被解释为Number,因此该元素将保留在数组中。

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

答案 1 :(得分:1)

正如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]

答案 2 :(得分:1)

为了完整性,在ES6中使用Array#mapMath.maxspread syntax ...的行中的解决方案。

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]]));

答案 3 :(得分:0)

您可以使用以下程序在所有子数组中找到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;
}

答案 4 :(得分:0)

filter不会做你正在尝试做的事情。它只选择是否接受该元素。

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

这是一个解决方案 -

&#13;
&#13;
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]]));
&#13;
&#13;
&#13;