首页 > 解决方案 > 将所需数据转换为具有嵌套对象的对象,其中包含键和值

问题描述

我有以下数据结构。我需要获得所需的动态输出,如下所示。

我尝试使用递归函数,因为预期的结构如下是递归的,但是我怎样才能将其作为键值呢?

有没有更好的方法来实现这一目标?

输入数据

let data = {
      users: [
        {
          terms: ["service|/users"],
          conditions: ["view", 'create']
        },
        {
          terms: ["service|/users-details"],
          conditions: ["view"]
        },
        {
          terms: ["service|/usersNew"],
          conditions: ["view"]
        },
        {
          terms: ["list|searchuser"],
          conditions: ["view"]
        },
        {
          terms: ["list|createuser"],
          conditions: ["view", "create"]
        },
        {
          terms: ["service|/user-contacts"],
          conditions: ["view"]
        },
        {
          terms: ["service|/user-location"],
          conditions: ["view"]
        },
        {
          terms: ["searchuserslist|button|select-button"],
          conditions: ["enable"]
        }
      ]
    };

预期产出

{
  list: [{ searchuser: ["view"] }, { createuser: ["view", "create"] }],
  service: [{/users: ['view', 'create']}, {/users-details: ['view']}, {/usersNew: ['view']}, {/user-contacts: ['view']}, {/user-location: ['view']}]
  searchuserslist: {
    button: [{select-button: ['enable']}]
  }
}

我试过的片段

   function resolvingData(data, object = {}) {
      return data.reduce((result, string) => {
        const [key, value] = string.split(/\|(.+)/);
        if (value && value.includes("|")) {
          result[key] = result[key] || {};
          resolvingData([value], result[key]);
        } else {
          result[key] = result[key] || [];
          result[key].push(value);
        }
        return result;
      }, object);
  }

标签: javascriptrecursion

解决方案


我认为这会起作用:

let data = {
      users: [
        {
          terms: ["service|/users"],
          conditions: ["view", 'create']
        },
        {
          terms: ["service|/users-details"],
          conditions: ["view"]
        },
        {
          terms: ["service|/usersNew"],
          conditions: ["view"]
        },
        {
          terms: ["list|searchuser"],
          conditions: ["view"]
        },
        {
          terms: ["list|createuser"],
          conditions: ["view", "create"]
        },
        {
          terms: ["service|/user-contacts"],
          conditions: ["view"]
        },
        {
          terms: ["service|/user-location"],
          conditions: ["view"]
        },
        {
          terms: ["searchuserslist|button|select-button"],
          conditions: ["enable"]
        }
      ]
    };

    var obj = {
    list: [],
    service: [],
    searchuserslist: {
    button: []
    }
    }
    var arr  = data.users;
  arr.map((element) => {
       if(element.terms[0].indexOf('list') > -1){
        var ch = element.terms[0].indexOf('|');
        var sl = element.terms[0].slice(ch+1)
       obj.list[sl] = element.conditions.map((ele) =>  ele)

      }
       if(element.terms[0].indexOf('service') > -1){
       var ch = element.terms[0].indexOf('|');
        var sl = element.terms[0].slice(ch+1)
       obj.service[sl] = element.conditions.map((ele) =>  ele)
      }
     if(element.terms[0].indexOf('searchuserslist') > -1){
     var ch = element.terms[0].indexOf('|');
        var sl = element.terms[0].slice(ch+1)
       obj.searchuserslist.button[sl] = element.conditions.map((ele) =>  ele)
      }
   })

推荐阅读