2017-08-29 112 views
0

在我的代碼中,我創建了fn回調函數,返回values < 2map函數中的循環遍歷作爲參數傳遞的數組。但控制檯登錄,而不是布爾值Javascript:for循環返回布爾值數組而不是數組

我在做什麼錯的陣列?

var newarr = [] 

function fn(val){ 
    return val < 3; 
} 

function map(arr){ 
    for (var i = 0; i < arr.length; i++){ 
    newarr.push(fn(arr[i])); 
    } 
    console.log(newarr); 
} 

map ([1,2,3,4,5,6], fn); 

我的結果

[ true, true, false, false, false, false ] 
+0

'VAL <3'是一個條件檢查並且將返回布爾 – Nemani

回答

0

這是因爲fn結果是布爾:

return val < 3; // true or false 

如果需要過濾元素,則邏輯應該有點不同,和名稱應該是filter,不map

var newarr = []; 

function fn(val) { 
    return val < 3; 
} 

function filter(arr) { 
    for (var i = 0; i < arr.length; i++) { 
    if (fn(arr[i])) { 
     newarr.push(arr[i]); 
    } 
    } 
    console.log(newarr); 
} 

而且ES6原生支持Array#filter功能:

let newArray = arr.filter(item => item < 3); 
0

校正代碼:

var newarr = [] 
 

 
function fn(val){ 
 
    return val < 3; 
 
} 
 

 
function map(arr){ 
 
    for (var i = 0; i < arr.length; i++){ 
 
if(fn(arr[i])) 
 
     newarr.push(arr[i]); 
 
    } 
 
    console.log(newarr); 
 
} 
 

 
map ([1,2,3,4,5,6], fn);

和ES6爲同一解決方案代碼

var newarr = [1,2,3,4,5,6].filter(function(item){ 
 
return item<3; 
 
}) 
 
console.log(newarr);