我有一个简单的数组 cars
,它是 Cars
类的 Parse 模型
当我这样做的时候
var uniqCars = _.uniq(cars);
这不起作用。 uniqCars
与 cars
完全相同。 cars
的长度为 5,uniqCars
的长度为 5(本应为 2)。
但是,当我这样做时:
var uniqCars = _.uniq(cars,
function (c) {
return c.id;
});
它有效。我的问题是,为什么它不适用于前者而适用于后者?为什么我必须说得这么冗长?这是解析或下划线的问题吗?
最佳答案
why doesn't it work with the former
因为,如果您不传递比较器函数,它默认使用 ===
运算符来比较对象。引用 _.uniq
文档,
Produces a duplicate-free version of the array, using === to test object equality. ... If you want to compute unique items based on a transformation, pass an iteratee function
当您使用 ===
( Strict Equality operator ) 时,没有两个对象是相同的,除非它们是同一个对象或形成字符串的相同字符序列。例如,
console.assert(({} === {}) === false);
var obj = {};
console.assert(obj === obj);
console.assert("ab" === "a" + "b")
console.assert("ab" === 'a' + "b")
因此,它并不是 Parse 特有的,而是 JavaScript 中的预期行为。
关于javascript - 下划线 uniq 在 Parse 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29670412/