[英]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.