Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert JSON Object array into associative array

Assuming I have 2 JSON Object arrays, which looks like this:

Resources:

[{
    "DefinitionId": 193041,
    "ResourceId": -2147290607,
    "AssetId": 193041
}, {
    "DefinitionId": 193042,
    "ResourceId": -2147290603,
    "AssetId": 193042
}]

ResourceIds

[193041, 193041, 193041, 193042]

The use-case:

I need to list the details from my Resources JSONObject for each ResourceId. For example I want to output the AssetId for every ResourceId in ResourceIds.

My plan:

I thought it would be an elegant solution to convert my Resources JSON into an associative array, so that I could access the AssetId for my ResourceId '193041' like this: Resources[193041].AssetId . The problem: I could only think about long code to convert my above Resources JSON into an associative JSON object.

The question:

How can I convert the above Resources JSON object array into an associative object array with ResourceId as key?

Desired Resources.json:

{
    "-2147290607": {
        "DefinitionId": 193041,
        "ResourceId": -2147290607,
        "AssetId": 193041
    },
    "-2147290603": {
        "DefinitionId": 193042,
        "ResourceId": -2147290603,
        "AssetId": 193042
    }
}
like image 693
kentor Avatar asked Jul 30 '16 18:07

kentor


1 Answers

You could use an object and iterate the array with Array#forEach

The forEach() method executes a provided function once per array element.

and assign the element to the property with the name of a.ResourceId.

The callback uses an Arrow function, because there is only one assignment.

var data = [{ "DefinitionId": 193041, "ResourceId": -2147290607, "AssetId": 193041 }, { "DefinitionId": 193042, "ResourceId": -2147290603, "AssetId": 193042 }],
    object = {};

data.forEach(a => object[a.ResourceId] = a);

console.log(object);
like image 117
Nina Scholz Avatar answered Oct 15 '22 10:10

Nina Scholz