2014-03-27 26 views
1

我正在尋找一種方法來根據所選屬性的值過濾/拒絕集合中的對象。具體而言,我需要篩選出包含所選屬性的重複值的對象。我需要將屬性值轉換爲小寫,並修剪空白。通過屬性值使用下劃線過濾重複的集合對象(不區分大小寫和修剪)

我已經有我的方法來刪除重複,但我不知道如何包括小寫轉換和修剪。

removeDuplicates: function (coll, attr) { 
     var uniques = _.map(_.groupBy(coll, function (obj) { 
     return obj[attr]; 
     }), function (grouped) { 
     return grouped[0]; 
     }); 

     return uniques; 
    } 

任何幫助,將不勝感激。

回答

2

如果集合這樣定義

var array = [{ 
    name: "thefourtheye" 
}, { 
    name: "theFOURtheye" 
}, { 
    name: "thethirdeye" 
}]; 

您應該使用_.uniq功能,這樣

var attr = "name"; 
console.log(_.unique(array, false, function(currenObject) { 
    return currenObject[attr].toLowerCase(); 
})); 
# [ { name: 'thefourtheye' }, { name: 'thethirdeye' } ] 

按照簽名,

uniq_.uniq(array, [isSorted], [iterator]) 

第二個參數是告訴集合是否已經排序。這很重要,因爲如果集合被排序,那麼有算法可以非常有效地找到唯一的數據。

第三個參數,應該是一個函數,它可以對數據進行變換以獲得鍵值進行比較。正如我們在示例中看到的,我們實際上從各個對象中選取name屬性並將它們轉換爲小寫字母。因此,這個較低的名稱將代表這個對象,如果兩個小寫名稱相同,那麼這些對象將被視爲彼此的副本。

相關問題