if
块正在正确执行。代码有什么问题?
let arr = [4, -4, 5.8, 1.6];
let newA = arr.filter((x) => {
if (x > 0 && Number.isInteger(x)) {
return x * x;
}
})
console.log(newA);
预期产量
[16]
实际输出:
[4]
为什么?
答案 0 :(得分:5)
给定的代码执行过滤部分,因为任何二次正整数都是truthy值,但不会返回新值。
看起来,您需要执行两项操作,其中一项是过滤并更改过滤后的值。
在这种情况下,您需要Array#filter
来获取正整数值,并需要Array#map
来获取二次值。
let array = [4, -4, 5.8, 1.6],
result = array
.filter(x => x > 0 && Number.isInteger(x))
.map(x => x * x);
console.log(result);
答案 1 :(得分:1)
原因已经在先前的答案中得到了解释,如果您要使用单个功能,则可以使用private volatile static boolean ready ;
reduce
答案 2 :(得分:1)
过滤器仅过滤值并返回布尔结果。您可以如下使用readWrite
insert
答案 3 :(得分:1)
使用reduce
方法:
let arr = [4, -4, 5.8, 1.6];
let newA = arr.reduce( ( acc, x ) => {
if ( x > 0 && Number.isInteger(x) ) { acc = acc.concat( [x*x] ) } ;
return acc;
}, []) ;
console.log(newA);
答案 4 :(得分:0)
不确定用例,但看起来像是“获取数组中所有正整数的平方”。如果是这样,则下面的代码应该起作用。
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;
})
首先提取所有正整数的列表,然后返回列表中各项的平方。