检查数组是不是唯一[重复]

Posted

技术标签:

【中文标题】检查数组是不是唯一[重复]【英文标题】:Check that the array is unique [duplicate]检查数组是否唯一[重复] 【发布时间】:2012-11-05 12:26:43 【问题描述】:

可能重复:javascript: Determine whether an array contains a value

var thelist = new Array();
function addlist()
thelist.push(documentgetElementById('data').innerhtml);

如何检查我推送的数据是否已经存在于数组thelist中?

【问题讨论】:

【参考方案1】:
var thelist = []; // Use the array literal, not the constructor.
function addlist()

  // get the data we want to make sure is unique
  var data = documentgetElementById('data').innerHTML;

  // make a flag to keep track of whether or not it exists.
  var exists = false;

  // Loop through the array
  for (var i = 0; i < thelist.length; i++) 

    // if we found the data in there already, flip the flag
    if (thelist[i] === data) 
      exists = true;

      // stop looping, once we have found something, no reason to loop more.
      break;
    
  

  // If the data doesn't exist yet, push it on there.
  if (!exists) 
    thelist.push(data);
  

【讨论】:

不妨将break; 放在if 块内,该块位于for 循环内 并使用Array#indexOf,因为几乎所有引擎都有它(对那些没有的引擎使用polyfill)。希望本机实现可能比您的循环更快(这绝不是保证)。 @T.J.Crowder 是的,这基本上删除了整个for 循环的东西,并允许一个/两个衬里。我打算发布一个答案,但是这个答案就在这里,基本上就是这样做的。【参考方案2】:

如果你不关心 IE

var thelist = [1, 2, 3];

function addlist(data) 

    alreadyExists = thelist.some(function (item) 
        return item === data
    );

    if (!alreadyExists) 
        thelist.push(data);
    

addlist(1);
addlist(2);
addlist(5);

console.log(thelist);​

http://jsfiddle.net/C7PBf/

Some 确定是否存在至少一个具有给定约束(回调返回值 === true)的元素。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/some

【讨论】:

【参考方案3】:

如果不关心 IE 8 或更低版本,可以使用Array.filter

var thelist = new Array();
function addlist()
    var val = documentgetElementById('data').innerHTML;
    var isInArray = theList.filter(function(item)
        return item != val
    ).length > 0;

    if (!isInArray)
        thelist.push(val);

或者,你可以使用Array.indexOf

var thelist = new Array();
function addlist()
    var val = documentgetElementById('data').innerHTML;
    var isInArray = theList.indexOf(val) >= 0;

    if (!isInArray)
        thelist.push(val);

【讨论】:

【参考方案4】:

看看underscore.js:underscore.js 然后您可以将数组检查为

_.contains(thelist, 'value you want to check');

// The full example
var thelist = new Array();
function addlist()
   var data = documentgetElementById('data').innerHTML;
   if(!_.contains(thelist, data)) theList.push(data);

或者你可以在不考虑重复值的情况下将值添加到数组中,并且在添加过程完成后,你可以删除重复的元素

theList = _.uniq(theList);

第二种方法当然效率较低。

【讨论】:

整个库对于像这样的简单任务来说是多余的。 是的,但答案仍然是正确的,如果 OP 代码中还有其他可以通过库简化的功能,也许会有用。 @MarkThomas 比较简单易学,但是如果你想学习JavaScript或者喜欢Vanilla JS(像我一样)就不太好。

以上是关于检查数组是不是唯一[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Javascript 中,如何检查数组是不是有重复值?

Java - 检查项目是不是在数组中[重复]

检查数组是不是为空[重复]

用PHP检查一个数组是不是包含另一个数组[重复]

检查Swift数组是不是包含对象实例[重复]

如何检查数组是不是包含元素[重复]