0

我想遍历一个对象列表并获取一个数组作为通过条件的项目的结果。像这样的东西:

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 的数组。

4

1 回答 1

2

你不想要地图,你想要过滤器

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);
  });

但是,这会为您提供未更改(但已过滤)的项目,如果您还想映射它们(从完整项目切换到仅 ID),您将在最终回调中执行此操作。如果您真的想一步完成,我建议您使用 each 并手动构建数组,如果您需要维护顺序,请使用 eachSeries。

于 2013-04-10T13:46:43.507 回答