Javascript:在数组中搜索dupes

时间:2012-01-06 00:45:22

标签: javascript arrays search splice

这就是我想要做的: 我向用户提供textarea并且他必须输入一些域名,如果他进入相同的域两次(重复)我想删除欺骗。

到目前为止,我已经到了可以找到欺骗的部分,这是我正在使用的代码:

function check_if_already_in_the_list___manual_textbox()
{

var therows=0;
var thetext = document.forms[0].text.value;
var newtext = thetext.split("\n");
therows+=newtext.length;
var i;
var match_counter=0;

    for(i=0;i<newtext.length;i++) // first iterate over the number of items
    {
        for(j=0;j<newtext.length;j++) // second, start a second loop to compare each other
        {

            if(newtext[j].toLowerCase()==newtext[i].toLowerCase())
            {           
            match_counter++;
            }

        if(match_counter >=2) // Found dupe!
        {alert("Matched:"+newtext[j]+" "+newtext[i]+" Counter"+match_counter);
match_counter=0;}


        }
        alert("Match counter:"+match_counter+ " D:"+newtext[i]);'
match_counter=0;
    }
//alert(""+match_counter);
return match_counter;
}

任何建议更好地做到这一点将是非常感激,我也不知道如何取出欺骗:(
  谷歌搜索我看到我可能不得不使用“拼接”,但不是很确定。

提前致谢!
[R

(P.S抱歉格式看起来很奇怪,但是当我粘贴在代码中时就发生了这种情况)

5 个答案:

答案 0 :(得分:2)

这是我对它的微弱尝试。它类似于

var arr = ["1","2","3","4","5","3","2","3","4"];
var arrCopy = [];
var list = {};

for (var i = 0, len = arr.length; i < len; i++) {
    if(!list[arr[i]])
        arrCopy.push(arr[i]);
    list[arr[i]] = ++list[arr[i]] | 0;
}

该对象还将包含每个重复项的数量。 arrCopy具有独特的价值。

编辑:请参阅RobG关于hasOwnProperty的评论。在这种情况下,它应该是

...
    if(!list.hasOwnProperty(arr[i]))
...

答案 1 :(得分:2)

很多答案。这是一个使用通用函数创建一个唯一成员数组的函数。请注意,结果将使用对象进行排序,并且使用for..in获取属性不能保证维持任何特定顺序。

var el = document.forms[0].text;
el.value = unique(el.value.toLowerCase().split(/[\n\r]/)).join('\n');

function unique(arr) {
  arr.sort();
  var i = arr.length;

  while (i--) {
    if (arr[i] == arr[i - 1]) {
       arr.splice(i, 1);
    }
  }
  return arr;
}

答案 2 :(得分:1)

您可以使用称为关联数组的东西来解决此问题。看看它是否适合你。

var initial_array = ['www.yahoo.com', 'www.google.com', 'www.facebook.com', 'www.google.com'];
var set = {};
for (var domain in initial_array){
    set[initial_array[domain].toLowerCase()] = true;
}
alert(set);

答案 3 :(得分:0)

第一 复制数组,并先将其小写

第二 数组在javascript中有一个“排序”功能,我建议你在比较前对它进行排序

第三 我看到你正在使用冒泡分类,这很好。在for(j=0;j<newtext.length;j++),您不需要从0开始,您可以从i

开始

最后,使用已存在的内容http://api.jquery.com/jQuery.unique/

答案 4 :(得分:0)

我认为这里有一个错误..

for(i=0;i<newtext.length;i++) // first iterate over the number of items
{
    for(j=0;j<newtext.length;j++) // second, start a second loop to compare each other

这段代码不应该是??

for(i=0;i<newtext.length -1;i++) // first iterate over the number of items
{
    for(j=i+1;j<newtext.length;j++) // second, start a second loop to compare each other

注意j=i+1newtext.length -1(最后一个是可选的)

然后:

  if(newtext[j].toLowerCase()==newtext[i].toLowerCase())
      return 'dupe';