2016-07-30 95 views
7

假設我有2個JSON對象陣列,它看起來像這樣:轉換JSON對象數組關聯數組

資源:

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

ResourceIds

[193041, 193041, 193041, 193042] 

的用例:

我需要從我的資源JSONObject中爲每個ResourceId列出詳細信息。例如,我想在ResourceIds的每個ResourceId輸出AssetId

我的計劃:

我認爲這將是一個完美的解決方案,以我的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 
    } 
} 
+1

您能顯示想要的結果嗎? –

+0

@NenadVracar當然,編輯! – kentor

+0

btw,[JSON](http://json.org/)是字符串形式的序列化對象。 –

回答

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);

+0

感謝您的回答,您是否介意elloborate這一點:'data.forEach(a => object [a.ResourceId] = a);'? – kentor

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); 
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 /強調了一個優雅的解決方案: _.find(資源{RESOURCEID:-2147290603 })由assetid;

有了這一點,我們可以找到剛好路過RESOURCEID所需的由assetid。爲簡單起見,我們甚至可以跳過JSON的轉換。