2017-08-29 106 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);