1 回答

TA贡献1875条经验 获得超5个赞
验证重复的典型思路是:创建一个缓存,将所有值逐个与缓存中当前的所有值进行比较,如果没有找到,则加入缓存,否则丢弃。
那么关键的步骤就是在缓存中检索这个步骤,最简单的思路当然是遍历,自己写循环来处理。如果利用集合值唯一性这个特点,使用集合来处理会更容易一些。现在问题来了,ES5 是没有集合的,这时候可以用哈希表来代替集合,因为哈希表的键也具有唯一性,值嘛,随便给一个就是了,反正不用。JS的对象就是哈希表实现,限制是值只能是字符串。所以如果你的值是字符串,或者转成字符串之后能与原值唯一对应,就可以用这个办法,示例:
var all = $input.map(function() { return $(this).val(); }).toArray();
var map = {};
for (var i = 0; i < all.length; i++) {
var v = all[i];
if (map[v]) {
alert("重复");
return;
} else {
map[v] = true;
}
}
刚才说了典型思路,现在再来说一下另一种思路,就是先排序,再从第2个(序号1)开始逐个与前一个比较,如果一样,则说明有重复
var all = $input.map(function() { return $(this).val(); }).toArray().sort();
for (var i = 1; i < all.length; i++) {
if (all[i] === all[i - 1]) {
alert("重复");
return;
}
}
添加回答
举报