编辑:为了满足@Raynos,这是一个纯 JS 解决方案。
var vals = {};
var flag = false;
var collection = document.getElementsByTagName('input');
collection = [].slice.call(collection);
collection.forEach(function(element, index, array) {
if (flag === true) return;
var i = element.value;
if (vals[i])
{
flag = true;
alert('There are duplicates!');
}
else
{
vals[i] = 1;
}
});
</p>
奖励:我通过 jsperf 运行我的解决方案;最后一个显然是迄今为止最快的。
编辑:这可能是解决您的问题的 jQuery 方法(在此工作小提琴)。我原来的答案仍然在下面。
var duplicatefound = false;
$('input').each(function(index, item){
if (duplicatefound) return;
val = $(item).val();
if ($('input[value="' + val + '"]').length == 1) return;
duplicatefound = true;
alert('There are similar values');
});
如果您需要捕获部分或全部重复值的替代解决方案(此处为工作小提琴):
var collection = $('input');
var duplicates = $.map(collection, function(item){
val = $(item).val();
return ($('input[value="' + val + '"]').length > 1) ? val : null;
});
if(duplicates.length > 0) alert('There are similar values');
正如其他人所提到的,您缺少vals
作为数组的声明,因此.push()
失败了。
您可能会发现基于对象的解决方案更优雅:Working fiddle
var vals = {};
$('input').each(function() {
var index = $(this).val();
if (vals[index])
{
vals[index]++
}
else
{
vals[index] = 1;
}
});
var duplicates = $.map(vals, function(val, key){
return (val > 1) ? key : null;
});
if (duplicates.length > 0) alert('There are duplicates!');