将JSON对象数组转换为关联数组
假设我有2个JSON对象数组,如下所示:
资源:
[{ "DefinitionId": 193041, "ResourceId": -2147290607, "AssetId": 193041 }, { "DefinitionId": 193042, "ResourceId": -2147290603, "AssetId": 193042 }]
ResourceIds
[193041, 193041, 193041, 193042]
用例:
我需要从资源JSONObject中为每个ResourceId列出详细信息。 例如,我想为ResourceId
中的每个ResourceId
输出AssetId
。
我的计划:
我认为这将是一个优雅的解决scheme,将我的Resources
JSON转换为关联数组,以便我可以像这样访问我的ResourceId
'的AssetId: Resources[193041].AssetId
。 问题:我只能考虑长的代码将我的上述Resources
JSON转换为关联的JSON对象。
问题是:
如何将上面的资源JSON对象数组转换为ResourceId作为关键字的关联对象数组?
期望的Resources.json:
{ "-2147290607": { "DefinitionId": 193041, "ResourceId": -2147290607, "AssetId": 193041 }, "-2147290603": { "DefinitionId": 193042, "ResourceId": -2147290603, "AssetId": 193042 } }
你可以使用一个对象并用Array#forEach
迭代数组
forEach()
方法为每个数组元素执行一次提供的函数。
并将该元素分配给名称为a.ResourceId
的属性。
callback使用一个箭头函数 ,因为只有一个分配。
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
或使用lodash /下划线作为优雅的解决scheme:_.find(Resources,{ResourceId:-2147290603})。AssetId;
有了这个,我们可以通过传递ResourceId来find所需的AssetId。 为了简单起见,我们甚至可以跳过JSON的转换。