簡體   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