将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的转换。