Javascript 如何使用jquery查找数组中的重复项

Javascript 如何使用jquery查找数组中的重复项,javascript,jquery,Javascript,Jquery,我有一个jQuery数组: var arr = $('input[name$="recordset"]'); 我得到数组的值,比如8或6 如果数组值重复或重复,我需要显示“请不要重复值”。如果没有,我还需要继续 使用jQuery,有人能告诉我如何找到重复的值吗 // For every input, try to find other inputs with the same value $('input[name$="recordset"]').each(function() { if

我有一个jQuery数组:

var arr = $('input[name$="recordset"]');
我得到数组的值,比如8或6

如果数组值重复或重复,我需要显示“请不要重复值”。如果没有,我还需要继续

使用jQuery,有人能告诉我如何找到重复的值吗

// For every input, try to find other inputs with the same value
$('input[name$="recordset"]').each(function() {
   if ($('input[name$="recordset"][value="' + $(this).val() + '"]').size() > 1)
      alert('Duplicate: ' + $(this).val());
});

我们所做的是创建一个散列来列出我们已经看到的值,以及一个存储所有唯一值的列表。对于选择器返回的每个输入,我们都会检查是否已经看到值,如果没有,我们会将其添加到列表中,并将其添加到已看到值的散列中。

希望下面的代码片段能够帮助人们寻找此类需求

var recordSetValues = $('input[name$="recordset"]').map(function ()    {
          return this.value;
      }).get();     
var recordSetUniqueValues = recordSetValues.filter(function (itm, i,    a) {
          return i == a.indexOf(itm);
      });
if (recordSetValues .length > recordSetUniqueValues.length)
      { alert("duplicate resource") }

可能是helpful@kumar那不是数组。这是一个jQuery对象。谢谢JAndy。。Jquery.Unique适用于DOM元素。@kumar Jquery.Unique将删除重复的DOM元素。但是在使用选择器时,不可能有重复的DOM元素。我认为OP所说的是,他正在调用
arr.val()
,并且它在输入中返回一个数字;他想检查重复的输入值。API说unique()只适用于DOM元素数组。谢谢你的谈话。。但是我的数组总是在用0检查,这不允许我用其他值检查。。像123thanks@Sean我建议这样做:
var val=$(item.val()然后使用val而不是item.value。其背后的原因是:表单元素的值并不总是在它的value属性中-它也可以是元素的文本内容。@Šime-我不能说我从未遇到过这种情况。关于我的信息,这将应用于哪些表单元素?@Sean我会去检查。。。请稍等。@Sean使用item.val在Chrome中是安全的。但我记得在旧版本的IE中有一个问题。不幸的是,我这里只有IE9测试版,所以我无法确认。@Šime——这很公平。我会再深入一点。谢谢你的检查!
var recordSetValues = $('input[name$="recordset"]').map(function ()    {
          return this.value;
      }).get();     
var recordSetUniqueValues = recordSetValues.filter(function (itm, i,    a) {
          return i == a.indexOf(itm);
      });
if (recordSetValues .length > recordSetUniqueValues.length)
      { alert("duplicate resource") }
$('form').submit(function(e) {

    var values = $('input[name="recordset[]"]').map(function() {
      return this.value;
    }).toArray();

    var hasDups = !values.every(function(v,i) {
      return values.indexOf(v) == i;
    });
    if(hasDups){
       // having duplicate values
       alert("please do not repeat the values");
       e.preventDefault();
    }

});