Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线uniq在解析中不起作用_Javascript_Parse Platform_Underscore.js - Fatal编程技术网

Javascript 下划线uniq在解析中不起作用

Javascript 下划线uniq在解析中不起作用,javascript,parse-platform,underscore.js,Javascript,Parse Platform,Underscore.js,我有一个简单的数组cars类cars 当我这样做的时候 var uniqCars = _.uniq(cars); 它不起作用uniqCars与cars完全相同。cars的长度是5,uniqCars的长度是5(当它应该是2时) 然而,当我这样做时: var uniqCars = _.uniq(cars, function (c) { return c.id; }); 它起作用了。我的问题是,为什么它不适用于前者,而适用于后者?我为什么要这么啰嗦?这是解析还是下划

我有一个简单的数组
cars
cars

当我这样做的时候

var uniqCars = _.uniq(cars);
它不起作用
uniqCars
cars
完全相同。
cars
的长度是5,
uniqCars
的长度是5(当它应该是2时)

然而,当我这样做时:

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

它起作用了。我的问题是,为什么它不适用于前者,而适用于后者?我为什么要这么啰嗦?这是解析还是下划线的问题?

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

使用===测试对象相等性,生成数组的重复自由版本。特别是,只保留每个值的第一次出现。如果您事先知道数组已排序,那么为isSorted传递true将运行更快的算法。如果要基于转换计算唯一项,请传递一个iteratee函数

为什么前者不起作用

因为,如果不传递comparator函数,默认情况下它将使用
==
操作符来比较对象。引用文件

使用===测试对象相等性,生成数组的重复免费版本如果要基于转换计算唯一项,请传递迭代函数

当您使用
==
()时,除非两个对象是同一个对象或组成字符串的相同字符序列,否则没有两个对象是相同的。比如说,

console.assert(({} === {}) === false);
var obj = {};
console.assert(obj === obj);
console.assert("ab" === "a" + "b")
console.assert("ab" === 'a' + "b")
因此,解析不是特定的,但它是JavaScript中的预期行为。

\uq.uniq(cars,“id”)
如果您想要一个不太详细的版本