2012-05-10 11 views
5

मैं वस्तुओं की एक सरणी है के रूप में अपने सर्वर साइड जे एस के भीतर इस प्रकार है:जावास्क्रिप्ट - ऑब्जेक्ट की श्रृंखला के भीतर डुप्लिकेट गणना

[ 
    { 
     "Company": "IBM" 
    }, 
    { 
     "Person": "ACORD LOMA" 
    }, 
    { 
     "Company": "IBM" 
    }, 
    { 
     "Company": "MSFT" 
    }, 
    { 
     "Place": "New York" 
    } 
] 

मैं, इस संरचना के माध्यम से पुनरावृति डुप्लीकेट का पता लगाने और उसके बाद की गिनती बनाने की जरूरत प्रत्येक मूल्य के साथ एक डुप्लिकेट पाया जाता है।

दोनों मानों को डुप्लिकेट के रूप में अर्हता प्राप्त करने के लिए मेल खाना चाहिए। "कंपनी": "आईबीएम" "कंपनी" के लिए एक मैच नहीं है: "एमएसएफटी"।

मेरे पास आवश्यक होने पर वस्तुओं की इनबाउंड सरणी बदलने का विकल्प है। मैं आउटपुट को ऑब्जेक्ट करना चाहता हूं, लेकिन काम करने के लिए वास्तव में संघर्ष कर रहा हूं।

संपादित करें: यहां कोड है जो अब तक है जहां प्रक्रियाArray ऊपर सूचीबद्ध के रूप में सरणी है।

var returnObj = {}; 

    for(var x=0; x < processArray.length; x++){ 

     //Check if we already have the array item as a key in the return obj 
     returnObj[processArray[x]] = returnObj[processArray[x]] || processArray[x].toString(); 

     // Setup the count field 
     returnObj[processArray[x]].count = returnObj[processArray[x]].count || 1; 

     // Increment the count 
     returnObj[processArray[x]].count = returnObj[processArray[x]].count + 1; 

    } 
    console.log('====================' + JSON.stringify(returnObj)); 
+1

संभावित डुप्लिकेट [जावास्क्रिप्ट में ऑब्जेक्ट्स की सरणी से डुप्लिकेट निकालें] (http://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript) –

+0

और ** ** किसी और को यह काम आपके लिए क्यों करना चाहिए? –

+0

@ रॉयनामिर: हाहाहा यह मुझे नहीं है :) – Sarfraz

उत्तर

22

उदाहरण के लिए:

counter = {} 

yourArray.forEach(function(obj) { 
    var key = JSON.stringify(obj) 
    counter[key] = (counter[key] || 0) + 1 
}) 

डॉक्स: Array.forEach, JSON.stringify

+0

मुझे विश्वास नहीं है कि सरणी पर 'प्रत्येक के लिए' फ़ंक्शन है। –

+7

@ElliotBonneville: लेकिन आप Google में विश्वास करते हैं, क्या आप – georg

+0

वाह नहीं, मुझे विश्वास नहीं है कि मैंने कभी उस समारोह के बारे में नहीं सुना है! मुझे पता है कि अब मैं लूप्स के लिए 8 ज़िलियन के बजाय क्या कर रहा हूं। धन्यवाद! –

1
Object.prototype.equals = function(o){ 
    for(var key in o) 
     if(o.hasOwnProperty(key) && this.hasOwnProperty(key)) 
      if(this[key] != o[key]) 
       return false; 
    return true; 
} 
var array = [/*initial array*/], 
    newArray = [], 
    ok = true; 
for(var i=0,l=array.length-1;i<l;i++) 
    for(var j=i;j<l+1;j++) 
    { 
     if(!array[i].equals(array[j])) 
      newArray.push(array[i]); 
    } 
संबंधित मुद्दे