【问题标题】:NodeJs Objects Merge in key value Id basedNodeJs对象合并基于键值ID
【发布时间】:2018-12-29 13:57:54
【问题描述】:

对象数组不同,

一些对象Module_Id相同,如何在预期输出中合并相同的module_Id对象

[{
           "Module_Id": "5b3c8f83f632ce0b049b16d0",
           "Create_Permission": false,
           "Edit_Permission": true,
           "View_Permission": true,
           "Delete_Permission": false
       },
       {
           "Module_Id": "5b3c8f83f632ce0b049b16d0",
           "Create_Permission": true,
           "Edit_Permission": false,
           "View_Permission": true,
           "Delete_Permission": false
       },
       {
           "Module_Id": "5b3c8f83f632ce0b049b16d0",
           "Create_Permission": false,
           "Edit_Permission": false,
           "View_Permission": true,
           "Delete_Permission": true
       },
       {
           "Module_Id": "5b3c8f83f632ce0b049bg56d",
           "Create_Permission": false,
           "Edit_Permission": false,
           "View_Permission": false,
           "Delete_Permission": true
       }]

我的预期输出是:

        [{
           "Module_Id": "5b3c8f83f632ce0b049b16d0",
           "Create_Permission": true,
           "Edit_Permission": true,
           "View_Permission": true,
           "Delete_Permission": true
       },
       {
         "Module_Id": "5b3c8f83f632ce0b049bg56d",
         "Create_Permission": false,
         "Edit_Permission": false,
         "View_Permission": false,
         "Delete_Permission": true
       }]

我正在使用 NodeJs 和 ES6 javascript

【问题讨论】:

    标签: javascript arrays node.js object


    【解决方案1】:

    你需要使用Array.reduce():

    var array = [{
               "Module_Id": "5b3c8f83f632ce0b049b16d0",
               "Create_Permission": false,
               "Edit_Permission": true,
               "View_Permission": true,
               "Delete_Permission": false
           },
           {
               "Module_Id": "5b3c8f83f632ce0b049b16d0",
               "Create_Permission": true,
               "Edit_Permission": false,
               "View_Permission": true,
               "Delete_Permission": false
           },
           {
               "Module_Id": "5b3c8f83f632ce0b049b16d0",
               "Create_Permission": false,
               "Edit_Permission": false,
               "View_Permission": true,
               "Delete_Permission": true
           },
           {
               "Module_Id": "5b3c8f83f632ce0b049bg56d",
               "Create_Permission": false,
               "Edit_Permission": false,
               "View_Permission": false,
               "Delete_Permission": true
    }];
    var res = array.reduce((acc, obj)=>{
      let existObj = acc.find(({Module_Id}) =>  Module_Id == obj.Module_Id);
      if(existObj){
         existObj.Create_Permission = existObj.Create_Permission || obj.Create_Permission;
         existObj.Edit_Permission = existObj.Edit_Permission || obj.Edit_Permission;
         existObj.View_Permission = existObj.View_Permission || obj.View_Permission;
         existObj.Delete_Permission = existObj.Delete_Permission || obj.Delete_Permission;
         return acc;
       }
      acc.push(obj);
      return acc;
    }, []);
    console.log(res);

    【讨论】:

      【解决方案2】:

      您可以将array#reduceObject.values() 一起使用

      const data = [{ "Module_Id": "5b3c8f83f632ce0b049b16d0", "Create_Permission": false, "Edit_Permission": true, "View_Permission": true, "Delete_Permission": false }, { "Module_Id": "5b3c8f83f632ce0b049b16d0", "Create_Permission": true, "Edit_Permission": false, "View_Permission": true, "Delete_Permission": false }, { "Module_Id": "5b3c8f83f632ce0b049b16d0", "Create_Permission": false, "Edit_Permission": false, "View_Permission": true, "Delete_Permission": true }, { "Module_Id": "5b3c8f83f632ce0b049bg56d", "Create_Permission": false, "Edit_Permission": false, "View_Permission": false, "Delete_Permission": true }],
          result = Object.values(data.reduce((r,o) => {
            r[o.Module_Id] = o.Module_Id in r ?  Object.keys(r[o.Module_Id]).reduce((res,k) => {
                res[k] = r[o.Module_Id][k] || o[k];
                return res;
              },{}) : o;
            return r;
          },{}));
      console.log(result);

      【讨论】:

      • 我预计不会从您的解决方案中获得输出
      • 更新了解决方案。
      猜你喜欢
      • 2018-05-03
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2018-04-01
      • 2021-01-27
      相关资源
      最近更新 更多