2014-03-24 60 views
0
的Javascript數組的唯一值

假設我有以下對象的JavaScript數組:什麼是正確的方式來選擇一個屬性對對象進行

var oData = [ 
    {field1 : "root", field2: "qqqqq", field3: "aaaaa", field4: "zzzzz"}, 
    {field1 : "root", field2: "qqqqq", field3: "aaaaa", field4: "xxxxx"}, 
    {field1 : "root", field2: "qqqqq", field3: "sssss", field4: "ccccc"}, 
    {field1 : "root", field2: "wwwww", field3: "sssss", field4: "vvvvv"}, 
    {field1 : "root", field2: "wwwww", field3: "ddddd", field4: "bbbbb"}, 
    {field1 : "root", field2: "wwwww", field3: "ddddd", field4: "nnnnn"}, 
    {field1 : "root", field2: "wwwww", field3: "fffff", field4: "mmmmm"} 
]; 

什麼是最好的執行方式

  1. 拷貝這個數組到一個新的數組的單個屬性(field1field2field3等),和
  2. 此所得的陣列將只包含具有不同VAL列表ues

I.e.所產生的陣列將

var oField1 = [ 
    {field1 : "root"} 
] 

var oField2 = [ 
    {field2 : "qqqqq"}, 
    {field2 : "wwwww"} 
] 

var oField3 = [ 
    {field3 : "aaaaa"}, 
    {field3 : "sssss"}, 
    {field3 : "ddddd"}, 
    {field3 : "fffff"} 
] 

(我已經添加了三個例子只是爲了說明我的努力實現的。如果我能爲一個屬性做到這一點,我當然能做到這一點對所有;-))

我可以通過數組循環,推只有唯一值的新陣列,或者我可以克隆陣列,刪除不需要的屬性和切片製作獨一無二的,但這些方法感到有點「髒」

有沒有一種優雅而好的方法來達到上述目的?

在此先感謝!

+3

「我可以通過數組循環,推只有唯一值到新陣列」 - 做到這一點。 – tymeJV

+0

我之所以不這樣做的原因是,它需要更多的代碼行,因此看起來有點像一個骯髒的解決方案。我更尋找乾淨優雅的東西:) – Qualiture

回答

2

由於您使用jQuery的:

$.unique(oData.map(function(x) { return x.field1; })) 
+0

真棒,非常感謝! – Qualiture

2
user Underscore js 

var oData = [ 
    {field1 : "root", field2: "qqqqq", field3: "aaaaa", field4: "zzzzz"}, 
    {field1 : "root", field2: "qqqqq", field3: "aaaaa", field4: "xxxxx"}, 
    {field1 : "root", field2: "qqqqq", field3: "sssss", field4: "ccccc"}, 
    {field1 : "root", field2: "wwwww", field3: "sssss", field4: "vvvvv"}, 
    {field1 : "root", field2: "wwwww", field3: "ddddd", field4: "bbbbb"}, 
    {field1 : "root", field2: "wwwww", field3: "ddddd", field4: "nnnnn"}, 
    {field1 : "root", field2: "wwwww", field3: "fffff", field4: "mmmmm"} 
]; 

var field2distinct = _.uniq(_.pluck(oData,'field2')); 

http://jsbin.com/fivis/1/edit?html,css,js,output

使用jquery

$ .unique(oData.map(函數(X){返回x.field1;}));

+0

感謝您的回答,但不幸的是,我不在這個項目中使用UnderscoreJS。你的解決方案當然也可以工作,因此我喜歡。 – Qualiture

相關問題