这就是我想要做的: 我向用户提供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抱歉格式看起来很奇怪,但是当我粘贴在代码中时就发生了这种情况)
答案 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+1
和newtext.length -1
(最后一个是可选的)
然后:
if(newtext[j].toLowerCase()==newtext[i].toLowerCase())
return 'dupe';