ECMA 脚本 6 版本
如果您处于支持 ECMA 脚本 6 的 Set 的环境中
,则可以使用 Array.prototype.some
和对象,如下所示Set
let seen = new Set();
var hasDuplicates = values.some(function(currentObject) {
return seen.size === seen.add(currentObject.name).size;
});
在这里,我们将每个对象都插入到 中,并检查添加之前和之后是否相同。这是有效的,因为返回基于唯一数据的数字(如果数据是唯一的,则 set 仅添加条目)。如果/当您有重复的名称时,大小不会增加(因为数据将不是唯一的),这意味着我们已经看到了当前名称,它将返回true。name
Set
size
Set.size
ECMA 脚本 5 版本
如果你没有支持,那么你可以使用一个普通的JavaScript对象本身,就像这样Set
var seen = {};
var hasDuplicates = values.some(function(currentObject) {
if (seen.hasOwnProperty(currentObject.name)) {
// Current name is already seen
return true;
}
// Current name is being seen for the first time
return (seen[currentObject.name] = false);
});
同样可以简明扼要地写出来,就像这样
var seen = {};
var hasDuplicates = values.some(function (currentObject) {
return seen.hasOwnProperty(currentObject.name)
|| (seen[currentObject.name] = false);
});
注意:在这两种情况下,我们都使用,因为它会短路。当它从函数获得真实值时,它将立即返回,它不会处理其余元素。Array.prototype.some
true