如何映射使用Underscore.js减少嵌套数组

时间:2014-08-13 19:03:17

标签: javascript node.js mapreduce nested underscore.js

鉴于:

appliedDoses = {
  "_id": "MAIN",
  "scheme": {
    "_id": "MAIN_SCHEME",
    "name": "ESQUEMA CLASICO",
    "vaccines": [
      {
      "_id": "BCG",
      "__v": 0,
      "doses": [
        {
        "_id": "BCG_UNICA",
        "frequencies": [
          {
          "_id": "BCG_UNICA_RECIEN_NACIDO",
          "group_type": {
            "_id": "RECIEN_NACIDO",
            "name": "RECIEN NACIDO"
          },
          "__v": 0,
          "status": true,
          "number_applied": 10
        }, ...

我想要的是按group_type.id == "RECIEN_NACIDO"doses[]._id == "BCG_UNICA"进行过滤,然后获得frequencies[].number_applied

的全部内容

我试过了:

async.each(appliedDose, function(scheme){
  async.each(scheme.scheme.vaccines, function(vaccine){
    async.each(vaccine.doses, function(dose){ 
      if(dose._id == getDose) {
        async.each(dose.frequencies, function(frequencie){
          if(frequencie.group_type._id == getGroup) {
            applied += frequencie.number_applied;
          }
        });
      }
    });
  });
});

但我的代码效率不高,我想知道MapReduce是否可以用来改进它。有人可以给我一个暗示吗?非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

我对你正在处理的对象感到有点困惑所以我会尝试处理抽象。如果你将其分解,你可能希望在这里做的更容易,更快。

通过以下方式获取过滤产生的集合:group_type._id == "RECIEN_NACIDO" && doses._id

使用_.pluck

获取number_applied的数组

使用sum:_.reduce(numAppliedArray, function(sum, x) { return sum + x}, 0);

减少这一点