为什么';我的过滤功能不工作吗?(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
值,即未从结果集中筛选。这也是我解决问题的方法。。。不需要在数组上迭代两次。