2013-04-10 34 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