2012-05-10 42 views
5

Tôi có một mảng các đối tượng như sau trong máy chủ của tôi bên JS:JavaScript - Đếm bản sao trong một mảng các đối tượng

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

tôi cần phải lặp qua cấu trúc này, phát hiện bất kỳ bản sao và sau đó tạo ra một tội danh một bản sao được tìm thấy dọc theo mỗi giá trị.

Cả hai giá trị phải khớp với nhau để đủ điều kiện là một bản sao, ví dụ: "Công ty": "IBM" không phù hợp với "Công ty": "MSFT".

Tôi có các tùy chọn thay đổi mảng nội dung đối tượng nếu cần. Tôi muốn đầu ra là một đối tượng, nhưng tôi thực sự đấu tranh để có được điều này để làm việc.

EDIT: Đây là mã tôi có cho đến nay, nơi processArray là mảng như được liệt kê ở trên.

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

bản sao có thể có của [Xóa bản sao khỏi một mảng đối tượng trong javascript] (http://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript) –

+0

Và ** tại sao ** ai đó nên làm công việc này cho bạn? –

+0

@RoyiNamir: hahaha nó không phải là tôi :) – Sarfraz

Trả lời

22

Ví dụ:

counter = {} 

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

Documents: Array.forEach, JSON.stringify.

+0

Tôi không tin rằng có chức năng 'forEach' trên mảng. –

+7

@ElliotBonneville: nhưng bạn tin vào google, không bạn – georg

+0

Wow, tôi không thể tin rằng tôi chưa bao giờ nghe nói về chức năng đó! Tôi biết những gì tôi đang làm thay vì 8 tỷ cho các vòng, bây giờ. Cảm ơn! –

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]); 
    } 
Các vấn đề liên quan