函数返回每个子数组中最大元素的数组
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]]);
答案 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#map
,Math.max
和spread 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
。它对数组的每个元素执行操作。
这是一个解决方案 -
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;