为什么我的过滤器功能不起作用? (JavaScript)

时间:2019-02-25 14:34:32

标签: javascript arrays ecmascript-6

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]

为什么?

5 个答案:

答案 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;
})

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