2015-04-16 82 views
2

不工作我有類Cars下劃線的uniq在解析

的解析模型的一個簡單數組cars當我做

var uniqCars = _.uniq(cars); 

這是行不通的。 uniqCarscars完全相同。 cars的長度是5,並且uniqCars的長度是5(當它應該是2時)。

然而,當我這樣做:

var uniqCars = _.uniq(cars, 
    function (c) { 
     return c.id; 
    }); 

它的工作原理。我的問題是,爲什麼它不與前者合作並與後者合作?爲什麼我必須如此詳細?這是解析還是下劃線的問題?

+1

'_.uniq(cars,「id」)'如果你想要一個不太詳細的版本 – nikoshr

回答

2

爲什麼沒有與前

默認使用===運算符來比較的對象工作,因爲,如果你沒有通過比較器功能,它。引述_.uniq文檔,

可生產使用===測試對象相等陣列,的無重複的版本。 ...... 如果要計算基於一個獨特的轉型項目,當您使用===Strict Equality operator)傳遞一個iteratee功能

,沒有兩個對象將是相同的,除非它們是同一個對象或形成字符串的相同字符序列。例如,

console.assert(({} === {}) === false); 
var obj = {}; 
console.assert(obj === obj); 
console.assert("ab" === "a" + "b") 
console.assert("ab" === 'a' + "b") 

因此,它不是特定於Parse,但它是JavaScript中的預期行爲。

1

使用嚴格的等式進行比較。除非在數組中有多個對同一個對象的引用,否則它們不會嚴格相等。

生成數組的重複版本,使用===測試對象相等性。特別是只保留每個值的第一次出現。如果您事先知道數組已排序,則傳遞true以執行isSorted將運行更快的算法。如果你想基於轉換來計算唯一的項目,傳遞一個迭代函數。