2017-08-29 23 views
0

関数のループがパラメータとして渡された配列を実行した後、以下のコードでfnコールバック関数を作成してvalues < 2を返します。しかしコンソールは値の代わりにブール値の配列を記録していますJavascript:for-loop値の配列の代わりにブール値の配列を返す

私は間違っていますか?

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

あなたがあなたの目的のために、あなたのコールバックでArray.prototype.filterを使用する必要があります。あなたのコード内

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

0

はこれを読む - Array.prototype.filter

var arr = [1,2,3,4,5,6]; 
var newArr = arr.filter((val) => val < 3); // [1,2] 
関連する問題