-4

How can I convert the below using lodash or javascript :

 [
  {
    "roleId": "1",
    "name": "Superadmin"
    "permissions": [
      {
        "permissionId": "1",
        "action": "Remove"
      }
    ]
  },
  "id": "2",
  "name": "Administrator",
  "permissions": [
    {
      "permissionId": "1",
      "action": "Remove"
    },
    {
      "permissionId": "2",
      "action": "Create"
    },
    {
      "permissionId": "3",
      "action": "Read"
    }
  ]
]

To this:

{
   Superadmin: ['Remove'],
   Administrator: ['Remove', 'Create', 'Read']
}
5
  • 6
    Have you tried anything that we can help you fix, rather than implementing this specification from scratch for free? Commented Apr 20, 2016 at 12:51
  • 3
    Also your json is not valid.check over that.. Commented Apr 20, 2016 at 12:53
  • 1
    This is valid: [ { "roleId": "1", "name": "Superadmin", "permissions": [ { "permissionId": "1", "action": "Remove" } ] }, { "id": "2", "name": "Administrator", "permissions": [ { "permissionId": "1", "action": "Remove" }, { "permissionId": "2", "action": "Create" }, { "permissionId": "3", "action": "Read" } ] } ] Commented Apr 20, 2016 at 12:56
  • I tried to loop, but any better and faster solutions... Commented Apr 20, 2016 at 13:03
  • One of these 10000 similar questions might help, e.g., JSON to javaScript array Commented Apr 20, 2016 at 13:05

4 Answers 4

3

A proposal with Array#forEach and Array#map.

var array = [{ "roleId": "1", "name": "Superadmin", "permissions": [{ "permissionId": "1", "action": "Remove" }] }, { "id": "2", "name": "Administrator", "permissions": [{ "permissionId": "1", "action": "Remove" }, { "permissionId": "2", "action": "Create" }, { "permissionId": "3", "action": "Read" }] }],
    object = {};

array.forEach(function (a) {
    object[a.name] = a.permissions.map(function (b) {
        return b.action;
    });
});

document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

Sign up to request clarification or add additional context in comments.

Comments

2

You can use reduce & map

var temp =  [{
    "roleId": "1",
    "name": "Superadmin",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }]
 }, {
    "id": "2",
    "name": "Administrator",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }, {
        "permissionId": "2",
        "action": "Create"
    }, {
        "permissionId": "3",
        "action": "Read"
    }]
 }]

temp.reduce((result,obj)=>{
  result[obj.name] = obj.permissions.map(x=>x.action)
  return result;
},{});

Comments

2

seeing the formatted and valid json from comments, here is something which you can use.

var arr = [{
    "roleId": "1",
    "name": "Superadmin",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }]
}, {
    "id": "2",
    "name": "Administrator",
    "permissions": [{
        "permissionId": "1",
        "action": "Remove"
    }, {
        "permissionId": "2",
        "action": "Create"
    }, {
        "permissionId": "3",
        "action": "Read"
    }]
}];

var newArray = arr.map(function(obj){ 
  var rObj = {};
  rObj[obj.name] = obj.permissions.map(function(childObj){
     return childObj.action;       
  });
  return rObj;
});

console.log(newArray);

https://jsfiddle.net/daze5a4c/1/

1 Comment

Output is object not an array
2
var json = [{
  "roleId": "1",
  "name": "Superadmin",
  "permissions": [{
    "permissionId": "1",
    "action": "Remove"
  }]
}, {
  "roleId": "2",
  "name": "Administrator",
  "permissions": [{
    "permissionId": "1",
    "action": "Remove"
  }, {
    "permissionId": "2",
    "action": "Create"
  }, {
    "permissionId": "3",
    "action": "Read"
  }]
}];

var roles = {};

json.forEach(function(obj) {
  var actions = [];
  obj.permissions.forEach(function(permission) {
    actions.push(permission.action);
  });
  roles[obj.name] = actions;
});

console.log(roles);

This is exactly how you want it. Just loop through the JSON-objects and get the properties you need to store them in another object (roles).

Output:

{
   Superadmin: ['Remove'],
   Administrator: ['Remove', 'Create', 'Read']
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.