首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将所需数据转换为具有嵌套对象和键和值的对象

将所需数据转换为具有嵌套对象和键和值的对象
EN

Stack Overflow用户
提问于 2019-03-13 11:50:01
回答 1查看 40关注 0票数 0

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

我尝试使用递归函数,因为预期的结构如下所示是递归的,但是我如何将其作为键值?

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

输入数据

代码语言:javascript
复制
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"]
        }
      ]
    };

预期输出

代码语言:javascript
复制
{
  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']}]
  }
}

我尝试过的代码片段

代码语言:javascript
复制
   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);
  }
EN

回答 1

Stack Overflow用户

发布于 2019-03-13 12:59:55

我认为这将会起作用:

代码语言:javascript
复制
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)
      }
   })
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55134101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档