2012-12-04 14 views
5

पर शाब्दिक रूप से परिवर्तित करना मेरे पास एक ऑब्जेक्ट शाब्दिक है, जहां इसकी कुंजी के मान अधिक ऑब्जेक्ट हैं, और आंतरिक वस्तुओं की कुंजियों में से एक को "रैंक" नाम दिया गया है - और इसमें एक फ़्लोटिंग पॉइंट मान है। मैं "रैंक" के मूल्य से क्रमबद्ध, ऑब्जेक्ट शाब्दिक को आंतरिक वस्तुओं की एक सरणी में परिवर्तित करना चाहता हूं।एक ऑब्जेक्ट को एक क्रमबद्ध ऐरे

इनपुट वस्तु:

{ 
452:{ 
    bla:123, 
    dff:233, 
    rank:2 
    }, 
234:{ 
    bla:123, 
    dff:233, 
    rank:1 
    } 

}

आउटपुट सरणी:

[ 
{ bla:123, dff:233, rank:1}, 
{ bla:123, dff:233, rank:2 } 
] 
+2

कोई कोड अब तक :) –

+2

पोस्ट कुछ कोड, अधिमानतः वस्तु प्रश्न में। – adeneo

+1

हमें ऑब्जेक्ट शाब्दिक कोड देखने की आवश्यकता है जिसे आप किसी सरणी में कनवर्ट करना चाहते हैं। हमें कोड दिखाएं। – jfriend00

उत्तर

7

उदाहरण:

var data = { 
    foo: { 
     rank: 5 
    }, 
    bar: { 
     rank: 2 
    }, 
    baz: { 
     rank: 8 
    } 
}; 

जावास्क्रिप्ट:

var mappedHash = Object.keys(data).sort(function(a, b) { 
    return data[ a ].rank - data[ b ].rank; 
}).map(function(sortedKey) { 
    return data[ sortedKey ]; 
}); 

यही होगा पहला sort एक सरणी में है कि map युक्त वस्तुओं obj.rank के मूल्य की और बाद आंतरिक वस्तुओं।

परिणाम: [{rank: 2}, {rank: 5}, {rank: 8}]


संदर्भ: Object.keys, Array.prototype.sort, Array.prototype.map


ऊपर कोड शामिल एकमा स्क्रिप्ट 262 संस्करण 5 कोड है, जो सभी आधुनिक ब्राउज़रों में उपलब्ध है। यदि आप विरासत ब्राउज़रों का भी समर्थन करना चाहते हैं, तो आपको विभिन्न ES5-Shim पुस्तकालयों में से एक को शामिल करने की आवश्यकता है। अपने ऑब्जेक्ट के गुणों से अधिक

+0

+1 बहुत अच्छा जवाब –

0

दोहराएं, एक सरणी में आंतरिक वस्तुओं धक्का, और फिर एक कस्टम प्रकार समारोह के साथ सरणी क्रमबद्ध करें:

var inputObject = {}, // your object here 
    arr = []; 

for (var k in inputObject) 
    arr.push(inputObject[k]); 

arr.sort(function(a,b) { return a.rank - b.rank; }); 
+0

मैं मदद अनुभाग में निर्देशित "@" प्रतीक का उपयोग कर उपयोगकर्ता nnnnnn का उत्तर देने का प्रयास कर रहा हूं। यह काम नहीं कर रहा है। मेरे पास इस पोस्ट को अन्य पोस्ट में भी मिला है - मेरे मैक या पीसी का उपयोग करना। जब मैं उपयोगकर्ता नाम से पहले "@" चिह्न का उपयोग करता हूं तो यह बस दिखाई नहीं देता है। मुझे इस तरह का प्रश्न कहां पोस्ट करना चाहिए? – Chris22

+0

किसी भी दर पर, nnnnnn के लिए, सरणी की तरह विधि में 'a.rank - b.rank' क्या करता है? धन्यवाद। – Chris22

+1

@ क्रिस 22 ['.sort()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) आपको एक फ़ंक्शन पास करने देता है जिसे कभी भी कॉल किया जाएगा सरणी में दो तत्वों के बीच तुलना की आवश्यकता है - 'ए' और' बी' दो तत्व हैं। तुलनात्मक कार्यों में 'बी' के बाद 'ए'' आने के बाद तुलनात्मक कार्य को सकारात्मक संख्या वापस करने की आवश्यकता होती है, यदि 'ए'' बी' से पहले आना चाहिए, और '0' यदि' ए' और 'बी' हो तो ऋणात्मक संख्या क्रमबद्ध उद्देश्यों के लिए बराबर हैं। इस मामले में तत्व वे ऑब्जेक्ट होते हैं जिनके पास संख्यात्मक 'रैंक' गुण होता है, इसलिए 'a.rank - b.rank' उचित मान देता है। – nnnnnn

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