Javascript 在多个对象上使用lodash mergeWith-是否可以检查父项?

Javascript 在多个对象上使用lodash mergeWith-是否可以检查父项?,javascript,node.js,lodash,Javascript,Node.js,Lodash,我有一个成批调用API的进程。因此,我收到了多个回复。我想将所有这些响应连接到一个响应中 例如,这是一个响应的输出: { "updateFromMyAPI": { "address": { "success": [ "ID_321bcd", // List of successful IDs "ID

我有一个成批调用API的进程。因此,我收到了多个回复。我想将所有这些响应连接到一个响应中

例如,这是一个响应的输出:

{
    "updateFromMyAPI": {
       "address": {
            "success": [
                "ID_321bcd", // List of successful IDs
                "ID_765jgf"
            ],
            "failure": [
                {
                    "id": "ID_778ttw",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                },
                {
                    "id": "ID_344tyf",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                }
            ]
       },
       "phone": {
           "success": [
               "ID_123acd", // List of successful IDs
               "ID_444bva"
           ],
           "failure": [
               {
                   "id": "ID_789xyz",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                },
                {
                    "id": "ID_111taf",
                     "error": {
                         "someField1": "",
                         "someField2": []
                     }
                 }
           ]
       }
    },    
    "processedFromMyAPI": { "success": 500, "failure": 100 }
  }
这是第二个输出:

{
    "updateFromMyAPI": {
       "address": {
            "success": [
                "ID_001abc"
            ],
            "failure": []
       },
       "phone": {
            "success": [
                "ID_888ttv"
            ],
           "failure": [
               {
                   "id": "ID_007ttr",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                },
                {
                    "id": "ID_008iit",
                     "error": {
                         "someField1": "",
                         "someField2": []
                     }
                 }
           ]
       }
    },   
    "processedFromMyAPI": { "success": 200, "failure": 50 }
  }
我想将它们组合起来,这样我就有一个输出文件,如下所示:

{
    "updateFromMyAPI": {
       "address": {
            "success": [
                "ID_321bcd", 
                "ID_765jgf",
                "ID_001abc"
            ],
            "failure": [
                {
                    "id": "ID_778ttw",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                },
                {
                    "id": "ID_344tyf",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                }
            ]
       },
       "phone": {
           "success": [
               "ID_123acd",
               "ID_444bva",
               "ID_888ttv"
           ],
           "failure": [
               {
                   "id": "ID_789xyz",
                    "error": {
                        "someField1": "",
                        "someField2": []
                    }
                },
                {
                    "id": "ID_111taf",
                     "error": {
                         "someField1": "",
                         "someField2": []
                     }
                 },
                 {
                    "id": "ID_007ttr",
                     "error": {
                         "someField1": "",
                         "someField2": []
                     }
                 },
                 {
                     "id": "ID_008iit",
                      "error": {
                          "someField1": "",
                          "someField2": []
                      }
                  }
           ]
       }
    },    
    "processedFromMyAPI": { "success": 700, "failure": 150 }
  }
我相信我已经正确地使用
lodash
mergeWith
和以下代码来连接数组:

  let output = {};
  _.mergeWith(output, ...apiResponses, function (objValue, srcValue, key, object, source, stack) {

    if (_.isArray(objValue)) {
      return objValue.concat(srcValue);
    } 
  });
这很好,但是没有将
processedFromMyAPI
对象中的值添加到一起。在最后的连接输出中,我得到的不是
“processedFromMyAPI”:{“success”:700,“failure”:150}
,而是
“processedFromMyAPI”:{“success”:200,“failure”:50}
。这是因为
200
50
的值来自要连接的最后一个输出。因此,它不是分别将数字500+200和100+50相加,而是用最后一个输出覆盖该值

我可以添加一个额外的if语句来检查
,如果键是
成功
失败
,则将它们相加

  let output = {};
  _.mergeWith(output, ...apiResponses, function (objValue, srcValue, key, object, source, stack) {

    if (_.isArray(objValue)) {
      return objValue.concat(srcValue);
    } else if(key === "success" || key === "failure"){
      return (objValue != null) ? objValue + srcValue : srcValue; 
    } 
  });
这很有效。现在我得到的是
“processedFromMyAPI”:{“success”:700,“failure”:150}
而不是
“processedFromMyAPI”的最后一个串联响应:{“success”:200,“failure”:50}
。但是,我不喜欢它的工作方式,因为它太宽泛了,当我希望它查找MyAPI.success中的processedFromAPI.success和processedFromAPI.failure时,它只查找
success
failure
。我很想知道是否有办法做到这一点

我注意到有一个
对象
参数。当我输出它时,它显示

{ success: 200, failure: 50}
更新代码:

  let output = {};
  _.mergeWith(output, ...apiResponses, function (objValue, srcValue, key, object, source, stack) {
    if(key === "success" || key === "failure"){
      console.log("object: ");
      console.log(object);
    }



    if (_.isArray(objValue)) {
      return objValue.concat(srcValue);
    } else if(key === "success" || key === "failure"){
      return (objValue != null) ? objValue + srcValue : srcValue; 
    } 
  });
这更接近我想要的,但我需要的是:

if((key === "success" || key === "failure") && object.parent.key === "processedFromMyAPI"){
      return (objValue != null) ? objValue + srcValue : srcValue; 
} 
长话短说,如果成功/失败值来自“processedFromMyAPI”对象,我只想将它们添加在一起。我怎样才能做到这一点