2012-10-13 16 views
28

संभव डुप्लिकेट:
array_count_values for javascript insteadजावास्क्रिप्ट समूह के आधार पर सरणी

चलो कहते हैं कि मैं निम्नलिखित की तरह साधारण JavaScript श्रृंखला करते हैं:

var array = ['Car', 'Car', 'Truck', 'Boat', 'Truck']; 

मैं समूह और की गिनती करना चाहते हैं प्रत्येक इसलिए मैं एक कुंजी/मूल्य मानचित्र की अपेक्षा करता हूं:

{ 
    Car : 2, 
    Truck : 2, 
    Boat : 1 
} 
+3

आप कुछ है कि काम नहीं करता है की कोशिश की? – haynar

+3

मुझे नहीं लगता कि यह एक डुप्लिकेट है। यह सवाल पीएचपी की तुलना में कहीं अधिक सामान्य है। –

+1

मुझे नहीं लगता कि यह एक डुप्लिकेट है। मैं जावास्क्रिप्ट के बारे में एक प्रश्न और उत्तर ढूंढ रहा हूं, मैं दूसरे प्रश्न को समझ नहीं पाऊंगा जो केवल PHP कोड सूचीबद्ध करता है। – Ande

उत्तर

49
var arr = [ 'Car', 'Car', 'Truck', 'Boat', 'Truck' ]; 
var hist = {}; 
arr.map(function (a) { if (a in hist) hist[a] ++; else hist[a] = 1; }); 
console.log(hist); 

परिणाम

{ Car: 2, Truck: 2, Boat: 1 } 

में यह काम करता है, भी:

hist = arr.reduce(function (prev, item) { 
    if (item in prev) prev[item] ++; 
    else prev[item] = 1; 
    return prev; 
}, {}); 
+0

पहला समाधान उन मानों के लिए काम नहीं करता है जो GUID या integers जैसे चर नामों के साथ संगत नहीं हैं, हालांकि यह –

+7

है, बस एक नोट, https://developer.mozilla.org/en-US/docs/Web/ के अनुसार जावास्क्रिप्ट/संदर्भ/Global_Objects/ऐरे/नक्शा नक्शा सरणी की एक प्रति बनाता है। आपके मामले में आप उस प्रतिलिपि का उपयोग भी नहीं कर रहे हैं, इसलिए ऐसा करने के लिए बेहतर होगा ऐसा करने के लिए: arr.forEach (function (a) {if (a hist) hist [a] ++; else hist [a] = 1;}) क्योंकि प्रत्येक के लिए कोई नई प्रतिलिपि नहीं बनाई जाएगी – pretobomba

+1

यदि आप 'arr.reduce' के बजाय अंडेस्कोर का उपयोग कर रहे हैं, तो आप _.countBy (सूची, इटरेटर) http://underscorejs.org/#countBy – Ande

3

आप प्रत्येक सूचकांक के माध्यम से लूप और एक शब्दकोश में उसे सहेज को बढ़ा देते जब हर उस कुंजी पाया जाता है कर सकते हैं ।

count = {}; 
for(a in array){ 
    if(count[array[a]])count[array[a]]++; 
    else count[array[a]]=1; 
} 

आउटपुट होगा:

Boat: 1 
Car: 2 
Truck: 2 
संबंधित मुद्दे