簡體   English   中英

為什么我的過濾功能不起作用? (JavaScript)的

[英]Why doesn't my filter function work? (Javascript)

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]

為什么?

給定的代碼執行過濾部分,因為任何二次正整數都是值,但它不會返回新值。

看起來,您需要兩個操作,一個過濾並更改過濾后的值。

在這種情況下,您需要使用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); 

原因已在前面的答案中解釋過,如果要使用單一功能,可以使用reduce

 let arr = [4, -4, 5.8, 1.6]; let newA = arr.reduce(function(accumulator, current) { if (current > 0 && Number.isInteger(current)) { accumulator.push(current * current); } return accumulator }, []) console.log(newA) 

Filter只過濾值並返回布爾結果..您可以使用map如下,

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

使用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); 

不確定用例,但看起來像是“獲得數組中所有正整數的平方”。 如果是,那么下面的代碼應該工作。

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

首先提取所有正整數的列表,然后返回列表中每個項目的平方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM