将JSON Object数组转换为关联数组

时间:2016-07-30 18:23:29

标签: javascript json node.js

假设我有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

3 个答案:

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