Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于检查JS数组中重复值的更快代码 var valueArray=['ABC'、'DEF'、'GHI'、'ABC'、'JKL'、'MNO'、'DEF']; var标志=假; 对于(var i=0;i_Javascript_Jquery_Arrays_Performance - Fatal编程技术网

Javascript 用于检查JS数组中重复值的更快代码 var valueArray=['ABC'、'DEF'、'GHI'、'ABC'、'JKL'、'MNO'、'DEF']; var标志=假; 对于(var i=0;i

Javascript 用于检查JS数组中重复值的更快代码 var valueArray=['ABC'、'DEF'、'GHI'、'ABC'、'JKL'、'MNO'、'DEF']; var标志=假; 对于(var i=0;i,javascript,jquery,arrays,performance,Javascript,Jquery,Arrays,Performance,使用jquery.unique()并比较数组大小。如果结果数组的大小不同,则返回false Doc for如果您想要一个快速、兼容的“随处可用”功能,只需检查重复项,而不需要任何库,请考虑: var valueArray = ['ABC','DEF','GHI','ABC','JKL','MNO','DEF']; var flag =false; for(var i=0; i<valueArray.length; i++) { for(var j=0; j<valueArray

使用
jquery.unique()
并比较数组大小。如果结果数组的大小不同,则返回false


Doc for

如果您想要一个快速、兼容的“随处可用”功能,只需检查重复项,而不需要任何库,请考虑:

var valueArray = ['ABC','DEF','GHI','ABC','JKL','MNO','DEF'];
var flag =false;
for(var i=0; i<valueArray.length; i++)
{
   for(var j=0; j<valueArray.length; j++)
  {
     if(valueArray[j] == valueArray[i] && j != i)
     {
          flag  = true;
          break;
     }
  }
}
if(flag)
    alert('same values found');
function hasDups(arr) {

  // Firstly copy array so don't affect original, then sort
  var t = arr.slice().sort();

  // If adjacent members have the same value, return true
  for (var i=1, iLen=t.length; i<iLen; i++) {
    if (t[i] === t[i-1]) return true;
  }
  return false;
}

console.log(hasDups(['abc','dvf','abc'])); // true
同样的策略也可以应用于第一种策略,避免ES5的一些错误


请注意,以上两种方法都只适用于比较基本值,但第一种方法更好。如果您想要一个可靠的函数来查找重复的对象,则需要做更多的工作。

对jquery不太确定,但如果只使用一个for循环,性能会更好:

function hasDups2(arr) {
  var obj = {};
  return arr.some(function(v){
    if (obj.hasOwnProperty(v)) return true;
    obj[v] = '';
  });
}
for(变量i=0;i

jsPerf测试:

这个问题似乎离题了,因为它是关于代码的review@chriz不..@RajaprabhuAravindasamy,但我不想删除重复项,只是想检查..“更好”根据什么标准?更快?更容易理解?易于维护?与旧浏览器最兼容?不依赖于库?@RobG
更快
且易于维护understand@Chris:实际测试了这个。它正在工作。但是你是对的,因为这可能不是一个有效的答案,因为它不是为了这个目的。@openorclosw很棒由于数组中的第一个元素是重复的元素,所以测试不是特别好,所以像索引和使用排序之类的方法只调用一次,而循环方法至少被调用了4次。更为公平的是,将中间的副本放在中间来模仿一个平均情况,其中副本可以出现在数组中的任何地方。结果令人满意。此外,性能受使用的浏览器的影响很大。是的,难怪我的答案比你的答案快得多,所以这只是因为浏览器。我认为openorclose的答案值得接受。它更简单。@chriz怎么会这样?它的代码更多,运行速度是上述解决方案的1/3到1/4(取决于浏览器),请参见。
for(var i = 0; i < valueArray.length; i++)
{
  if (valueArray.indexOf(valueArray[i], i+1) != -1) {
    flag = true;
    break;
  }
}