javascript - 一起比较多个字段值

标签 javascript jquery

如何使用 jQuery 比较多个输入字段值以及是否存在匹配警报“有相似的值”?

<input value="111"> //similar
<input value="222">
<input value="111"> //similar
<input value="333">

上面的 html 代码应该提醒“有相似的值”,因为它有 2 个相同的值。如何使用 jQuery 完成?

我试过(以下代码不起作用):

演示: http://jsfiddle.net/HpWLQ/

$('input').each(function () {
    var $this = $(this);
    var val = $this.val();
    vals.push(val);
});
for (var i = 0; i < vals.length; i++) {
    for (var n = 0; n < vals.length; n++) {
        if (n !== i) {
            if (vals[i] === vals[n]) {
                alert('There are similar values');
            }
        }
    }
}

最佳答案

编辑:为了满足@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;
    }
});


奖励:我通过 jsperf 运行我的解决方案;最后一个是obviously by far the fastest .

编辑:这可能是 jQuery 方式 解决您的问题( Working fiddle here )。我的原始答案保留在下面。

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');
});

如果您需要捕获部分或全部重复值 ( Working fiddle here ) 的替代解决方案:

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!');

关于javascript - 一起比较多个字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062708/

相关文章:

javascript - 为什么Ajax不使用自调用?

javascript - 哪张图表适合员工了解 12 个月的可交付成果?

javascript - React 不渲染 css 样式

javascript 表单选择姓名和号码

javascript - 如何在 Bootstrap 选项卡中添加关闭图标?

javascript - 全日历仅在月 View 中隐藏事件

javascript - angular-cli 和 scss 被内联

javascript - 在reactjs中,如何映射数组并将 添加到返回值?

javascript - 从包含最新日期的数组中获取对象

javascript - 使用一个 ajax 调用上传 xml 文件和图像文件以及相同的提交