2016-07-30 25 views
7

मान लिया जाये कि मैं जो इस तरह दिखता है 2 JSON वस्तु सरणियों है,:Convert JSON वस्तु सरणी

संसाधन:

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

ResourceIds

[193041, 193041, 193041, 193042] 

उपयोग-केस:

मुझे प्रत्येक संसाधन ID के लिए अपने संसाधन JSONObject से विवरण सूचीबद्ध करने की आवश्यकता है। उदाहरण के लिए, ResourceIds में प्रत्येक ResourceId के लिए AssetId आउटपुट करना चाहता हूं।

मेरे योजना:

मैंने सोचा था कि इतना है कि मैं इस तरह मेरी ResourceId '193,041' के लिए AssetId यहां पहुंच सकता है यह, एक सुरुचिपूर्ण समाधान एक साहचर्य सरणी में मेरी Resources JSON कन्वर्ट करने के लिए होगा: Resources[193041].AssetId। समस्या: मैं केवल उपरोक्त Resources JSON को एक सहयोगी JSON ऑब्जेक्ट में परिवर्तित करने के लिए लंबे कोड के बारे में सोच सकता हूं।

प्रश्न:

मैं कैसे RESOURCEID के साथ एक साहचर्य वस्तु सरणी में ऊपर संसाधन JSON ऑब्जेक्ट सरणी में बदल सकते हैं कुंजी के रूप में?

वांछित Resources.json:

{ 
    "-2147290607": { 
     "DefinitionId": 193041, 
     "ResourceId": -2147290607, 
     "AssetId": 193041 
    }, 
    "-2147290603": { 
     "DefinitionId": 193042, 
     "ResourceId": -2147290603, 
     "AssetId": 193042 
    } 
} 
+1

क्या आप वांछित परिणाम दिखा सकते हैं? –

+0

@NenadVracar यकीन है, संपादित! – kentor

+0

बीटीडब्ल्यू, [जेएसओएन] (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

आपके उत्तर के लिए धन्यवाद, क्या आप इसे थोड़ा सा करने के लिए दिमाग में हैं: 'data.forEach (a => ऑब्जेक्ट [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: -+२१४७२९०६०३ ।}) assetid;

इसके साथ ही हम ResourceId को पास करके आवश्यक AssetId पा सकते हैं। हम सादगी के लिए जेएसओएन के रूपांतरण को भी छोड़ सकते हैं।

संबंधित मुद्दे