js中filter 和map的区别

    jwolf 
1361  0  0   2015-12-31 2:38


使用mongodb查询的时候有如下代码:


collection.find(query, {
                    "name": 1,
                    "time": 1,
                    "title": 1,
                    "_id":1,
                    "pv":1,
                    skip: (page - 1)*limit,
                    limit: limit
                })
但是这样得到的docs总是把数组对象中所有的对象属性都返回,应用场景这个数组对象会经过网络返回到前端的,多余的字段占用了多余的网络消耗,mongodb中用了skip,和limit就不能返回限制的字段??


---------------------------------------(对不起大家的分界线。。。)

这个问题由于时间的原因我还没找到答案,只好自己过滤一下数组:

(正题来了:js中数组过滤怎么搞)

当然,根据过滤直译过来就知道filter函数

现在我的场景是有这样一个数组:


var array = [{name:"iphone6s",price:5000},{name:"iphone5",price:1000},{name:"iphone4s",price:500},{name:"iphone5s",price:2500}]
期望得到



[{name:"iphone6s"},{name:"iphone5"},{name:"iphone4s"},{name:"iphone5s"}]
先查看官方文档:


ECMASCRIPT 5中数组的方法:

filter()方法返回的数组元素师调用的数组的一个子集。传递的函数是用来逻辑判定的,该函数返回true或false.如果返回值为true或能转化为true的值,那么传递給判定函数的元素就会成为返回的新子集的成员。

也就是说,如果我只有4999(事实上我没有,希望老板有一天看到),我要看看我能买哪款iphone,我就可以这样:


var IcanAfford = array.filte(function(item){
    return item.price<=4999 });


显然,这不是我初始需要的。

再来官方文档:

map()方法将调用的数组的每个元素传递給指定的函数,并返回一个数组,它包含该函数的返回值。

例如:


var aa = [1,2,3];
bb = aa.map(function(x){return x*x});
得到bb是[1,4,9]。


这正是我需要的,形象一点对比这两个方法: