Javascript:for循环返回布尔数组而不是值数组

时间:2017-08-29 09:15:39

标签: javascript arrays callback

在下面的代码中,我创建了一个fn回调函数,在values < 2函数中的循环运行通过作为参数传递的数组之后返回map。但控制台正在记录一组布尔值而不是值

我做错了什么?

 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 ]

4 个答案:

答案 0 :(得分:1)

这是因为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);

答案 1 :(得分:0)

为了您的目的,您应该将Array.prototype.filter与回调一起使用。

答案 2 :(得分: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);

答案 3 :(得分:0)

阅读本文 - Array.prototype.filter

var arr = [1,2,3,4,5,6];
var newArr = arr.filter((val) => val < 3); // [1,2]