2012-10-08 19 views
6

संभव डुप्लिकेट:
How to sort an associative array by its values in Javascript?मूल्य से एक (सहयोगी) सरणी को सॉर्ट करने के लिए कैसे करें?

तो सबसे पहले बंद मैं जानता हूँ कि तकनीकी रूप से जावास्क्रिप्ट साहचर्य सरणियों नहीं है, लेकिन मुझे यकीन नहीं था कि यह कैसे शीर्षक और भर में सही विचार प्राप्त करने के लिए ।

तो यहाँ

कोड रहा है,

var status = new Array(); 
status['BOB'] = 10 
status['TOM'] = 3 
status['ROB'] = 22 
status['JON'] = 7 

है और मैं मूल्य से यह सॉर्ट करने के लिए ऐसी है कि चाहते हैं जब मैं बाद में ROB पर इसके माध्यम से पाश पहले BOB आदि

मैं आता है तो, कोशिश की है,

status.sort() 
status.sort(function(a, b){return a[1] - b[1];}); 

लेकिन उनमें से कोई भी वास्तव में कुछ भी नहीं करता है।

उसी क्रम में आने से पहले और बाद में कंसोल में सरणी को प्रिंट करना।

+4

जे एस सरणियों के गलत उपयोग है। केवल सरणी के साथ संख्यात्मक कुंजी का उपयोग करें। '.ॉर्ट 'कुछ भी नहीं करता है क्योंकि सख्ती से आपके सरणी में कोई तत्व नहीं है। आपको इस मामले में वस्तुओं का उपयोग करना होगा। मैं [एमडीएन - ऑब्जेक्ट्स के साथ काम करना] पढ़ने की सलाह देता हूं (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects)। –

+2

इसके अलावा: [संपत्ति मूल्य द्वारा जावास्क्रिप्ट ऑब्जेक्ट को सॉर्ट करना] (http://stackoverflow.com/questions/1069666/sorting-javascript-object-by-property-value)। –

+0

हालांकि डुप्लिकेट के रूप में चिह्नित किए गए समाधान को डुप्लिकेट में उल्लिखित नहीं किया गया है। – PopeJohnPaulII

उत्तर

21

Arrays में केवल संख्यात्मक अनुक्रमणिका हो सकती है। आपको इसे ऑब्जेक्ट या ऑब्जेक्ट्स के ऐरे के रूप में फिर से लिखना होगा।

var status = new Object(); 
status['BOB'] = 10 
status['TOM'] = 3 
status['ROB'] = 22 
status['JON'] = 7 

या

var status = new Array(); 
status.push({name: 'BOB', val: 10}); 
status.push({name: 'TOM', val: 3}); 
status.push({name: 'ROB', val: 22}); 
status.push({name: 'JON', val: 7}); 

आप status.push विधि पसंद है, तो उसे अपने साथ सॉर्ट कर सकते हैं:

status.sort(function(a,b) { 
    return a.val - b.val; 
}); 
+0

मुझे यह पसंद है (ऐरे) दृष्टिकोण, 'वैल' द्वारा कॉल करने और क्रमबद्ध करने का उचित तरीका क्या होगा? – PopeJohnPaulII

+0

मैंने ऑब्जेक्ट्स के ऐरे के साथ 'वैल' द्वारा क्रमबद्ध करने के लिए अपना उत्तर अपडेट किया है। – saml

+0

ग्रेट एंड सरल समाधान। – Ahsan

2

सबसे पहले - यह एक सरणी एक मानचित्रण के रूप में उपयोग करने के लिए बनाने के लिए गलत है।

var status = {}; 
status['BOB'] = 10; 

सरणी तर्क संख्यात्मक-अनुक्रमिक अनुक्रमित संभाल करने के साथ एक वर्ग है: इसके बजाय वस्तु का उपयोग करें।

अब आपकी प्रतिक्रिया का जवाब दे, मैपिंग, कोई आदेश है ताकि इसे पुनरावृति होगी तो मैं आप के साथ वस्तुओं के साथ एक सरणी का उपयोग करने के sugest के रूप में

"एक मानचित्रण छँटाई" ऐसी कोई बात नहीं है के बारे में कोई गारंटी नहीं है कुंजी, मूल्य:

var status = []; 
status.push({ key: 'BOB', value: 10 }); 

या दो सरणियों:

var status = { 
    keys: [], 
    values: [] 
}; 
status.keys.push('BOB'); 
status.value.push(10); 

यह अपनी आवश्यकताओं पर निर्भर है।

1

आप सरणी के अंदर जावास्क्रिप्ट ऑब्जेक्ट का उपयोग करना चाहिए: jsfidle

 var status = new Array(); 
    status.push({key: 'BOB', value: 10}); 
    status.push({key: 'TOM', value: 3}); 
    status.push({key: 'ROB', value: 22}); 
    status.push({key: 'JON', value: 7}); 
    status.sort(function(a, b){ 

     if(a.value > b.value){ 
     return -1; 
     } 
     else if(a.value < b.value){ 
     return 1; 
     } 
     return 0; 
    }); 
+0

स्ट्रिंग तुलना – cw24

2

"सरणी" जावास्क्रिप्ट में संख्यानुसार अनुक्रमित रहे हैं। "ऑब्जेक्ट्स" वे हैं जो आप सहयोगी सरणी को कॉल करेंगे। "ऑब्जेक्ट्स" स्वाभाविक रूप से अनियंत्रित हैं।

तो ऐसा करने के लिए आपको अपनी डेटा संरचना को थोड़ा बदलना होगा।

var arr = []; // Array 

// push a few objects to the array. 
arr.push({name: 'BOB', age: 10}); 
arr.push({name: 'TOM', age: 3}); 
arr.push({name: 'ROB', age: 22}); 
arr.push({name: 'JON', age: 7}); 

var sorted = arr.sort(function(a, b) { 
    return a.age - b.age; 
}); 

console.log(sorted); 

enter image description here

+0

के लिए यह अच्छा है नाम से इसे कैसे क्रमबद्ध करें? –

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