[英]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]
您可以使用以下程序在所有子數組中找到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.