2014-12-01 51 views
4

我有一個JSON數組對象如下:集團化JSON陣列上使用下劃線JS

var orders = [{ 
    orderId: 1, 
    firstName: 'John', 
    lastName: 'Smith', 
    address: { 
     street: '123 Main Street', 
     city: 'New York', 
     zip: 10001 
    } 
}, { 
    orderId: 2, 
    firstName: 'John', 
    lastName: 'Smith', 
    address: { 
     street: '456 Main Street', 
     city: 'New York', 
     zip: 10001 
    } 
}, { 
    orderId: 3, 
    firstName: 'John', 
    lastName: 'Smith', 
    address: { 
     street: '123 Main Street', 
     city: 'New York', 
     zip: 10001 
    } 
}, { 
    orderId: 4, 
    firstName: 'John', 
    lastName: 'Smith', 
    address: { 
     street: '123 Main Street', 
     city: 'New York', 
     zip: 10002 
    } 
}]; 

我試圖用underscore.js創建一個新的數組對象,由地址分組,以滿足使用情況顯示所有已發貨到123 Main Street, New York, 1001的訂單。

underscore.js正確的做法嗎?如果是這樣,我該怎麼做?任何提示都會有幫助。

+0

這將是什麼輸出?對象指向數組?你會用什麼鍵入對象?數組陣列? – 2014-12-01 23:02:21

+0

@JuanMendes - 輸出將是一個數組數組。我正在嘗試您對_.groupBy提出的建議。 – orchard 2014-12-01 23:14:33

回答

3

_.groupBy

console.log(_.groupBy(orders, function(obj){ 
    return obj.address.street + '|' + obj.address.city + '|' + obj.address.zip; 
})); 

http://jsfiddle.net/mendesjuan/gc47ruyL/1/

這個例子假設你不能有一個|在一個地址,你可能需要一個更好的分隔符,或使用JSON.stringify

console.log(_.groupBy(orders, function(obj){ 
    return JSON.stringify([obj.address.street, obj.address.city, obj.address.zip]); 
})); 
+0

謝謝@JuanMendes - 我認爲groupBy會解決我的問題。我上面發佈的JSON是一個超過我所擁有的簡化版本,所以我試圖將這些部分放在一起。我會在這裏更新這兩種方式來通知它是否有效。再次感謝 - 每個人 - 尋求幫助。 – orchard 2014-12-01 23:32:09

+1

'return JSON.stringify(...)'如果你不想選擇特定的分隔符,它總是用於轉義。 – Bergi 2014-12-01 23:56:56

+0

@Bergi,除了不能保證屬性的順序,兩個類似的對象最終可能會以不同的方式進行序列化。 – 2014-12-02 05:14:07

2

如果你已經在你的頁面下劃線,你可以使用

var filteredOrders = _.filter(orders, function(order){ 
    return (order.address.street === '123 Main Street') && 
      (order.address.city === 'New York') && 
      (order.address.zip === 10001); 
}); 

Fiddle

+0

謝謝@amit_g - 這很有幫助,但是這對於只有1個地址的特定示例有效。我發佈的JSON示例代表了可能包含具有不同地址的多個用戶的數組。 我需要能夠比較所有用戶的地址對象,以便我可以找到所有共享相同地址的用戶。 – orchard 2014-12-01 22:56:48

+1

@orchard,請用示例更新問題以證明這一要求。 – 2014-12-01 22:59:23

+0

@JordanGray其實它不容易擴展,很容易,如果你知道你在尋找什麼,否則,一些繁重的工作是需要找到重複 – 2014-12-01 23:03:17