如何通过检查JavaScript数组来检查用户名是否被采用。

问题描述:

var y=document.forms["form"]["user"].value 
    if (y==null || y=="") 
     { 
      alert("Username cannot be Blank"); 
      return false; 
     }; 

var x = new Array(); 
    x[0] = "bill"; 
    x[1] = "ted"; 
    x[2] = "jim"; 
    for (keyVar in x) 
     { 
      if (x==y) 
      { 
       alert("Username Taken"); 
       return false; 
      }; 

     }; 

如何将一个变量与JavaScript数组中的变量进行比较,我设法做出了上面的例子,但是第二部分,我需要的一点不起作用。有任何想法吗 ?如何通过检查JavaScript数组来检查用户名是否被采用。

你应该使用对象来代替:

var y = document.forms["form"]["user"].value; 
if (y == null || y == "") { 
    alert("Username cannot be Blank"); 
    return false; 
}; 

var x = {}; 
x["bill"] = true; 
x["ted"] = true; 
x["jim"] = true; 
if (x[y] === true) { 
    alert("Username Taken"); 
    return false; 
} 

你可以简单地检查与Array.prototype.indexOf方法的数组。

var x = [ 'bill', 'ted', 'jim' ], 
    y = 'ted'; 

if(x.indexOf(y) > -1) { 
    alert('Username Taken'); 
    return false; 
} 
+0

我认为的indexOf是不是检查,如果慢得多一个对象的属性是真实的(当数组增长时,这会变得更相关) –

+0

@Nicola这可能是最大的因为OP想要对数组进行搜索,所以直接回答。如果数组被排序,那么我们可以使用二进制搜索。否则,使用一个对象可能会产生更好的结果...(键/值,TRIE等) –

+0

@NicolaPeluchetti:在性能成为问题之前,数组需要变得非常庞大。但是,ES.next将解决所有问题,弱点地图即将到来:) – jAndy

你可以做到这一点很简单的jQuery

数组列表值

var x = new Array(); 
x[0] = "bill"; 
x[1] = "ted"; 
x[2] = "jim"; 

然后

if(jQuery.inArray("John", arr) == -1){ 
    alert("Username Taken"); 
} 
+0

这里没有介入jQuery –