如果元素在数组js中

时间:2015-08-04 18:15:10

标签: javascript arrays find

我是JavaScript的新手,我将非常感谢您的帮助。我尝试搜索数组的元素,但我找不到正确的解决方案。首先我试过这个,但没有成功。

 var find = function(string, array) {
   for(i=0;i>=array.length-1;i++){
     if(array[i]==string){
       return true;
      }
     else{
       return false;
       }
      }
  };

然后我尝试了这个

var find = function(string, array) {
  if(array.indexOf(string)>-1){
      return true;}
    else{
      return false;
        }

  };

但它不适用于数字 这是我的测试

Test.assertEquals(find("hello", ["bye bye","hello"]), true);
Test.assertEquals(find("2", ["bye bye","2"]), true);
Test.assertEquals(find("2", ["bye bye",2]), false);

3 个答案:

答案 0 :(得分:1)

第一次找到与您要查找的元素不匹配的元素时,您将返回false。只有在处理完整个数组后才应返回false。您的循环也是不正确的,如果i为0,除非数组为空,否则它将永远不会大于或等于数组长度:

 var find = function(string, array) {
   for(i=0; i < array.length; i++) {
     if(array[i]==string) {
       return true;
     }
   }
   return false;
 };

您还应该关注命名约定。您的函数名为find,但它实际上并未返回找到的元素。我将函数命名为contains

这是一个很好的学习练习,但不要重新发明轮子:

[1,2,3,4,5,6].indexOf(foo) > -1

如果数组中有foo,则返回true。

答案 1 :(得分:0)

假设你有一个Test.assetEquals函数,只需使用build in array函数:

Test.assertEquals((["bye bye","hello"].indexOf('hello') > -1),true);

答案 2 :(得分:0)

使用类型转换:

var a = [1, 2, 3];
if (a.some(function (x) { return x == "2" })) {
    ...
}

严格比较:

if (a.indexOf("2") >= 0) {
    ...
}