[英]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
為每ResourceId
在ResourceIds
。
我的計划:
我認為這將是一個完美的解決方案,以我的轉換Resources
JSON成一個關聯數組,這樣我就可以訪問AssetId
我ResourceId
“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.