[英]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.