2013-04-10 62 views
0

我想迭代一个对象列表并获取一个数组作为通过条件的项目的结果。这样的事情:如何使用async.js映射数组?

var list = [{foo:"bar",id:0},{foo:"baz",id:1},{foo:"bar",id:2}]; 
    async.map(list, function(item, cb) { 
    if (item.foo === "bar") 
     cb(null, item.id); 
    else 
     cb(); // do nothing 
    }, function(err, ids) { 
    console.log(ids); 
    }); 

如果条件没有通过,我不想要任何错误回调。只有一个具有元素ID的数组。

回答

2

你不想要的地图,你想filter

var list = [{foo:"bar",id:0},{foo:"baz",id:1},{foo:"bar",id:2}]; 
    async.filter(list, function(item, cb) { 
    if (item.foo === "bar") 
     cb(true); // include 
    else 
     cb(false); // do not include 
    }, function(err, items) { 
    console.log(items); 
    }); 

然而,这给你不变(但过滤)的项目,如果你想将它们映射切换(从整个项目只是IDS)同样,你会在最后的回调中做到这一点。如果你真的想在一步完成这两个步骤,我会建议使用每个和手动构建数组,如果你需要维护秩序使用eachSeries。

+0

我准备手动完成。谢谢 – 2013-04-10 13:58:17