0

这就是我正在尝试做的事情:我向用户展示了一个文本区域,他必须输入一些域,如果他两次输入同一个域(重复)我想删除欺骗。

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

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

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

4

5 回答 5

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]))
...
于 2012-01-06T00:59:14.207 回答
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;
}
于 2012-01-06T02:24:12.630 回答
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);
于 2012-01-06T00:51:09.193 回答
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';
于 2012-01-06T01:04:58.600 回答
0

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

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

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

最后,使用已经存在的东西,http://api.jquery.com/jQuery.unique/

于 2012-01-06T00:49:41.320 回答