为什么';我的过滤功能不工作吗?(Javascript)

为什么';我的过滤功能不工作吗?(Javascript),javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,如果块正确执行。代码有什么问题 让arr=[4,-4,5.8,1.6]; 设newA=arr.filter((x)=>{ 如果(x>0&&Number.isInteger(x)){ 返回x*x; } }) console.log(newA)给定代码执行过滤部分,因为任何二次正整数都是一个值,但它不会返回新值 看起来,您需要两个操作,一个是过滤,另一个是更改过滤值 在这种情况下,您需要获得正整数和二次值 let array=[4,-4,5.8,1.6], 结果=数组 .filter(x=>x>

如果
块正确执行。代码有什么问题

让arr=[4,-4,5.8,1.6];
设newA=arr.filter((x)=>{
如果(x>0&&Number.isInteger(x)){
返回x*x;
}
})

console.log(newA)给定代码执行过滤部分,因为任何二次正整数都是一个值,但它不会返回新值

看起来,您需要两个操作,一个是过滤,另一个是更改过滤值

在这种情况下,您需要获得正整数和二次值

let array=[4,-4,5.8,1.6],
结果=数组
.filter(x=>x>0&&Number.isInteger(x))
.map(x=>x*x);

控制台日志(结果)不确定用例,但看起来像是“获取数组中所有正整数的平方”。如果是,那么下面的代码应该可以工作

let arr3=[4,-4,5.8,1.6];   
let new3 = arr3.filter((x)=>{ 
    return (x>0 && Number.isInteger(x));
}).map(function(y){ 
return y*y;
})

首先提取所有正整数的列表,然后返回列表中每个项的平方。

原因已在前面的答案中解释,如果要使用单个函数,可以使用
reduce

让arr=[4,-4,5.8,1.6];
让newA=arr.reduce(功能(累加器、电流){
if(当前>0&&Number.isInteger(当前)){
蓄能器。推动(电流*电流);
}
回流蓄能器
}, [])

log(newA)
过滤器只过滤值并返回布尔结果。。您可以使用
map
如下所示

让arr=[4,-4,5.8,1.6];
设newA=arr.filter((x)=>x>0&&Number.isInteger(x))
.map((x)=>x*x);

console.log(newA)使用
减少
方法:

让arr=[4,-4,5.8,1.6];
让newA=arr.reduce((acc,x)=>{
如果(x>0&&Number.isInteger(x)){acc=acc.concat([x*x])};
返回acc;
}, []) ;

console.log(newA)
Filter
应该返回真/假结果,您正在查找的可能是
map
。因为
Filter
希望谓词返回布尔值(
true
/
false
),然后返回
x*x
,对于第一个元素,其计算结果为
16
,该元素是
truthy
值,即未从结果集中筛选。这也是我解决问题的方法。。。不需要在数组上迭代两次。