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
}
}
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);
你可以使用reduce
:
var resources = [{
"DefinitionId": 193041,
"ResourceId": -2147290607,
"AssetId": 193041
}, {
"DefinitionId": 193042,
"ResourceId": -2147290603,
"AssetId": 193042
}];
var resourceIds =[193041, 193041, 193041, 193042];
var res = resources.reduce( function(prev, curr) {
// Check AssetId
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
if ( resourceIds.indexOf( curr.AssetId ) >= 0 ) prev[ curr.ResourceId ] = curr;
return prev;
}, {} );
var resJSON = JSON.stringify( res );
var Resources = [{
"DefinitionId": 193041,
"ResourceId": -2147290607,
"AssetId": 193041
}, {
"DefinitionId": 193042,
"ResourceId": -2147290603,
"AssetId": 193042
}];
Resources.find(function(value){return value.ResourceId === -2147290603}).AssetId
or use lodash/underscore for an elegant solution: _.find(Resources, {ResourceId : -2147290603}).AssetId;
With this we can find the required AssetId by just passing the ResourceId. We can even skip the conversion of JSON for simplicity.
链接地址: http://www.djcxy.com/p/35448.html上一篇: 在BufferedImage上绘制带有不透明度的圆角矩形
下一篇: 将JSON对象数组转换为关联数组