簡體   English   中英

將JSON Object數組轉換為關聯數組

[英]Convert JSON Object array into associative array

假設我有2個JSON對象數組,如下所示:

資源:

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

ResourceIds

[193041, 193041, 193041, 193042]

用例:

我需要為每個ResourceId列出我的Resources JSONObject的詳細信息。 比如我要輸出AssetId為每ResourceIdResourceIds

我的計划:

我認為這將是一個完美的解決方案,以我的轉換Resources JSON成一個關聯數組,這樣我就可以訪問AssetIdResourceId “193041”是這樣的: Resources[193041].AssetId 問題:我只能考慮使用長代碼將上面的Resources JSON轉換為關聯的JSON對象。

問題:

如何將上述Resources 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的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM