Underscore uniq在Parse中不起作用

时间:2015-04-16 09:20:18

标签: javascript parse-platform underscore.js

我有一个类cars的Parse模型的简单数组Cars

当我这样做时

var uniqCars = _.uniq(cars);

它没有用。 uniqCarscars完全相同。 cars的长度为5,uniqCars的长度为5(当它应为2时)。

然而,当我这样做时:

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

有效。我的问题是,为什么它不与前者合作并与后者合作?为什么我必须如此冗长?这是Parse还是下划线的问题?

2 个答案:

答案 0 :(得分:2)

  

为什么它不适用于前者

因为,如果您没有通过比较器功能,它默认使用===运算符来比较对象。引用_.uniq文档,

  

生成数组的无副本版本,使用===测试对象相等性。 ... 如果您想根据转化计算唯一项目,请传递一个iteratee函数

使用===Strict Equality operator)时,除非它们是同一个对象或相同的字符序列形成一个字符串,否则两个对象不会相同。例如,

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

因此,它不是Parse特有的,但它是JavaScript中的预期行为。

答案 1 :(得分:1)

使用严格的相等性进行比较。除非对数组中的同一个对象有多个引用,否则它们不会完全相同。

  

使用===生成数组的无副本版本,以测试对象相等性。特别是仅保留每个值的第一次出现。如果您事先知道数组已排序,则为isSorted传递true将运行更快的算法。如果要根据转换计算唯一项,请传递iteratee函数。