将JSON对象数组转换为关联数组

假设我有2个JSON对象数组,如下所示:

资源:

[{
    "DefinitionId": 193041,
    "ResourceId": -2147290607,
    "AssetId": 193041
}, {
    "DefinitionId": 193042,
    "ResourceId": -2147290603,
    "AssetId": 193042
}]

ResourceIds

[193041, 193041, 193041, 193042]

用例:

我需要从我的资源JSONObject中为每个ResourceId列出详细信息。 比如我要输出AssetId为每ResourceIdResourceIds

我的计划:

我认为这将是一个完美的解决方案,以我的转换Resources JSON成一个关联数组,这样我就可以访问AssetIdResourceId “193041”是这样的: 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的属性。

回调使用箭头函数,因为只有一个分配。

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 / underscore作为优雅的解决方案:_.find(Resources,{ResourceId:-2147290603})。AssetId;

通过这个,我们可以通过传递ResourceId来找到所需的AssetId。 为简单起见,我们甚至可以跳过JSON的转换。

链接地址: http://www.djcxy.com/p/35447.html

上一篇: Convert JSON Object array into associative array

下一篇: Ansible upgrade 2.1: gather