2012-07-25 14 views
13

मैं एक सरणी के रूप में निम्नानुसार है,किसी सरणी में प्रत्येक आइटम की घटनाओं की संख्या को कैसे गिनें?

var arr = ['ab','pq','mn','ab','mn','ab'] 

अपेक्षित परिणाम

arr['ab'] = 3 
arr['pq'] = 1 
arr['mn'] = 2 

इस प्रकार की कोशिश की,

$.each(arr, function (index, value) { 
    if (value) 
     arr[value] = (resultSummary[value]) ? arr[value] + 1 : 1; 
}); 

console.log(arr.join(',')); 
+2

"jQuery सरणी" जैसी कोई चीज़ नहीं है। –

+1

http://stackoverflow.com/questions/5615916/jquery-count-array-elements-by-value – timmalos

+3

आपके उत्तर का प्रदर्शन करने के लिए एक पहेली जोड़ने के लिए बहुत अस्पष्ट प्रश्न – user907860

उत्तर

36

इस कार्य — के लिए jQuery का उपयोग करने के इस उदाहरण एक का निर्माण करेगा कोई जरूरत नहीं सरणी

में प्रत्येक भिन्न तत्व की मौत की मात्रा के साथ वस्तु
var occurrences = { }; 
for (var i = 0, j = arr.length; i < j; i++) { 
    occurrences[arr[i]] = (occurrences[arr[i]] || 0) + 1; 
} 

console.log(occurrences);  // {ab: 3, pq: 1, mn: 2} 
console.log(occurrences['mn']); // 2 

Example fiddle


तुम भी Array.reduce का उपयोग एक ही परिणाम प्राप्त करने के लिए कर सकते हैं और से बचने के एक for-loop

var occurrences = arr.reduce(function(obj, item) { 
    obj[item] = (obj[item] || 0) + 1; 
    return obj; 
}, {}); 

console.log(occurrences);  // {ab: 3, pq: 1, mn: 2} 
console.log(occurrences['mn']); // 2 

Example fiddle

+0

+1। डाउनवॉट्स क्यों? – starbeamrainbowlabs

+2

आप एक अच्छा शॉर्टेंड भी उपयोग कर सकते हैं, जैसे 'obj [arr [i]] = (obj [arr [i]] || 0) + 1'। आपका समाधान तब तक काम करता है जब तक आपको डेटा प्रकारों की परवाह नहीं है, लेकिन यदि आप '2" 'और' 2' के बीच अंतर करना चाहते हैं, तो आपको उस जानकारी को एन्कोड करना होगा (बस कह रहा है)। –

+0

शॉर्टेंड के लिए अच्छा बिंदु :) – fcalderan

1
var result = {}; 
function count(input){ 
    var tmp = 0; 
    if(result.hasOwnProperty(input)){ 
    tmp = result[input]; 
    result[input]=tmp+1; 
    }else{ 
    result[input]=1; 
    } 
} 

फ़ंक्शन के ऊपर आपको एक ऐरे में एक ही स्ट्रिंग की संख्या गिनने में मदद मिलेगी।

0

क्या आप ऐसा करने की कोशिश कर रहे हैं?

$.each(arr, function(index, value) { 
    if (!resultSummary[value]){ 
     resultSummary[value] = 0; 
    } 
    resultSummary[value] += 1; 
}); 

इस कोड को सरणी में प्रत्येक स्ट्रिंग की घटनाओं की गिनती और आप Sugar लाइब्रेरी का उपयोग कर रहे हैं, तो resultsArray

2

में परिणाम स्टोर करेगा यह सिर्फ है:

arr.count('ab'); 

DEMO

देखें: Array count API

0

var arr = ['ab','pq','mn','ab','mn','ab'] 



function getCount(arr,val) 
{ 
    var ob={}; 
    var len=arr.length; 
    for(var k=0;k<len;k++) 
    { 
     if(ob.hasOwnProperty(arr[k])) 
     { 
      ob[arr[k]]++; 
      continue; 
     } 
     ob[arr[k]]=1; 
    } 
    return ob[val]; 
} 



//run test 
alert(getCount(arr,'ab'));//3 

डेमो: http://jsfiddle.net/dmx4y/2/

1

आप एक समाधान है कि एक पुस्तकालय की आवश्यकता है, और विरासत को Javascript का समर्थन की जरूरत नहीं है नहीं करना चाहते हैं:

var report = {}; 

arr.forEach(function(el){ 
    report[el] = report[el] + 1 || 1; 
}); 

या यदि आप चाहते हैं jQuery का उपयोग करके इसे करने के लिए:

var report = {}; 

$.each(arr,function(i,el){ 
    report[el] = report[el] + 1 || 1; 
}); 

यह शर्तों और सेट मानों का परीक्षण करने के लिए short-circuit logic का उपयोग करता है। मुझे लगता है कि यह जावास्क्रिप्ट करने के लिए एक सुंदर संक्षिप्त और पठनीय तरीका है।

console.log(report); 
5

मुझे लगता है कि यह सरणी में समान मूल्य के साथ घटनाओं को गिनने का सबसे आसान तरीका है।

var a = [true, false, false, false]; 
a.filter(function(value){ 
    return value === false; 
}).length          
0
var arr = ['ab','pq','mn','ab','mn','ab']; 
var result = { }; 
    for(i=0;i<arr.length;++i) 
    { 
     if(!result[arr[i]]) 
      result[arr[i]]=0; 
     ++result[arr[i]]; 
    } 

for (var i in result){ 
console.log(i+":"+result[i]); 
} 
1

प्रयास करें $.grep

उदाहरण:

var arr = ['ab','pq','mn','ab','mn','ab'] 

jQuery.grep(arr, function(a){ 
    return a == 'ab' 
}).length // 3 

अगर IE8 समर्थन आवश्यक नहीं है।

['ab','pq','mn','ab','mn','ab'].filter(function(value){ 
    return value == 'ab' 
}).length // 3 
संबंधित मुद्दे