在下面的代码中,我创建了一个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 ]
答案 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]