假设我有2个JSON Object数组,如下所示:
资源:
[{
"DefinitionId": 193041,
"ResourceId": -2147290607,
"AssetId": 193041
}, {
"DefinitionId": 193042,
"ResourceId": -2147290603,
"AssetId": 193042
}]
ResourceIds
[193041, 193041, 193041, 193042]
用例:
我需要为每个ResourceId列出我的Resources JSONObject的详细信息。例如,我想为AssetId
中的每个ResourceId
输出ResourceIds
。
我的计划:
我认为将Resources
JSON转换为关联数组是一种优雅的解决方案,因此我可以像AssetId
'193041'那样访问ResourceId
:{ {1}}。问题:我只能考虑使用长代码将上面的Resources[193041].AssetId
JSON转换为关联的JSON对象。
问题:
如何将上述Resources JSON对象数组转换为以ResourceId为键的关联对象数组?
Desired Resources.json:
Resources
答案 0 :(得分:2)
您可以使用对象并使用Array#forEach
forEach()
方法每个数组元素执行一次提供的函数。
并将该元素分配给名为a.ResourceId
的属性。
回调使用Arrow function,因为只有一个分配。
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);
答案 1 :(得分:1)
您可以使用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 );
答案 2 :(得分:0)
var Resources = [{
"DefinitionId": 193041,
"ResourceId": -2147290607,
"AssetId": 193041
}, {
"DefinitionId": 193042,
"ResourceId": -2147290603,
"AssetId": 193042
}];
Resources.find(function(value){return value.ResourceId === -2147290603}).AssetId
或使用lodash / underscore获得优雅的解决方案: _.find(Resources,{ResourceId:-2147290603})。AssetId;
有了这个,我们可以通过传递ResourceId找到所需的AssetId。为简单起见,我们甚至可以跳过JSON的转换。