2015-10-09 20 views
1

我想寫這將採取以下陣列的功能,返回的值的每個唯一實例在數組中,在一個新的數組

var data = [ 
      { 
       name: 'Josh', 
       description: 'some data about this guy', 
       sortOrder: 'Gold' 
      }, 
      { 
       name: 'Bill', 
       description: 'some data about this guy', 
       sortOrder: 'Platinum' 
      }, 
      { 
       name: 'Gary', 
       description: 'some data about this guy', 
       sortOrder: 'Platinum' 
      }, 
      { 
       name: 'Phillip', 
       description: 'some data about this guy', 
       sortOrder: 'Platinum' 
      }, 
      { 
       name: 'Bob', 
       description: 'some data about this guy', 
       sortOrder: 'Gold' 
      }, 
      { 
       name: 'Barry', 
       description: 'some data about this guy', 
       sortOrder: 'Gold' 
      }, 
      { 
       name: 'Joe', 
       description: 'some data about this guy', 
       sortOrder: 'Gold' 
      }, 
      { 
       name: 'Ed', 
       description: 'some data about this guy', 
       sortOrder: 'Silver' 
      }, 
      { 
       name: 'Baxter', 
       description: 'some data about this guy', 
       sortOrder: 'Platinum' 
      }, 
      { 
       name: 'Patrick', 
       description: 'some data about this guy', 
       sortOrder: 'Silver' 
      }, 
      { 
       name: 'Stepehn', 
       description: 'some data about this guy', 
       sortOrder: 'Silver' 
      } 
]; 

,並給我看起來像這樣的數組:

[Platinum, Gold, Silver] <-- The order doesn't matter 

因此,這將檢查所有sortOrder數值數組中,並返回一個包含每個唯一sortOrder一個實例的數組。

到目前爲止我寫的所有東西都不斷給我每個sortOrder的多個實例....任何人都可以給我一隻手嗎?

如果可以獲得任何幫助,我可以訪問underscore.js庫。

+0

http://underscorejs.org/#uniq? - >'_.uniq(_。pluck(data,'sortOrder'))' –

回答

2

試試這個

var result = _.chain(data) 
 
    .pluck('sortOrder') 
 
    .uniq() 
 
    .value(); 
 

 
console.log(result);

Example

3

這應該工作的偉大(清潔JS):

var orders = []; 

for (var i = 0; i < data.length; i++){ 

    if (data[i].sortOrder && orders.indexOf(data[i].sortOrder) == -1){ 
     orders.push(data[i].sortOrder); 
    } 

} 
+0

什麼是阻止在這裏多次添加相同的值?重複'if('foo'&&!orders ['foo']){ orders.push('foo'); }'不斷增加'訂單' –

+0

@PaulS。它不應該。你可以給我一個例子嗎? –

+0

@ YavorIvanov-'orders [data [i] .sortOrder]'正在檢查*命令*的屬性**名爲** * Gold *,* Platinum *等,但它們是數組內的值,而不是屬性的名稱。這只是創建一個包含所有* sortOrder *值的數組,包含重複數據。也許你錯過了「* ...返回包含每個唯一sortOrder。*」的一個實例的數組。 – RobG

2

以下劃線:

console.log(_.chain(data).pluck('sortOrder').uniq().value()); 
1

當值字符串我們可以通過對象香草的JavaScript

var a = (function (arr) { 
    var i, o = {}; 

    for (i = 0; i < arr.length; ++i) 
     o[arr[i].sortOrder] = true; 

    return Object.keys(o); 
}(data)); 
1

不使用任何其他庫:

var results = []; 
for(var i = 0; i < data.length; ++i){ 
    if(results.indexOf(data[i].sortOrder) < 0){ 
     results.push(data[i].sortOrder); 
    } 
} 

results變量將包含你想要的清單。

+0

你不需要'.length === 0'的特殊情況,_indexOf_會給'-1'仍然是 –

+1

是真的。當我寫第一部分時,不確定我在想什麼。編輯採取了這一點。 –

0

很多簡單的JS產品,總是很好的與圖書館進行比較。考慮使用ES5的減少:

var result = data.reduce(function(acc, val) { 
    if (acc.indexOf(val.sortOrder) == -1) acc.push(val.sortOrder); 
    return acc; 
},[]); 
相關問題