【问题标题】:How to check an array if it contains a string in Javascript?如何检查数组是否包含Javascript中的字符串?
【发布时间】:2013-07-10 12:19:37
【问题描述】:

我有一个包含字符串的数组。

var js_userBoxName = new Array();

如果字符串包含应该显示的单词“foo”,我想搜索数组的元素。

例如,我的数组包含单词 {fooofy, foofa, foo, awtsy},将显示 foofy、foofa 和 foo,因为它们都包含单词 foo。

【问题讨论】:

标签: javascript arrays


【解决方案1】:

查看Array.filter 方法:

var arr = ['foofy', 'foofa', 'foo', 'awtsy'];
var fooItems = arr.filter(function (item) {
    return item.indexOf('foo') >= 0;
});

// Yields ['foofy', 'foofa', 'foo']

链接的 MDN 页面包含一个针对不支持它的浏览器的 polyfill。如果你碰巧在使用 jQuery,你可以使用$.grep:

var arr = ['foofy', 'foofa', 'foo', 'awtsy'];
var fooItems = $.grep(arr, function (item) {
    return item.indexOf('foo') >= 0;
});

【讨论】:

  • 如果需要支持 IE
【解决方案2】:

注意:良好的性能提示是在迭代数组时始终缓存数组的长度,而不是在每次循环执行时重新计算它。 len = js_userBoxName.length

http://jsperf.com/caching-array-length/4

function () {
    for(var i = 0, len = js_userBoxName.length; i < len; i++){
      if(typeof js_userBoxName[i] === 'string'){
        if(js_userBoxName[i].indexOf('foo') == -1)
          return true;
      }
    }
    return false;
}

【讨论】:

  • +1 用于缓存array.length和类型检查,检查indexOf的返回值时也应该使用=== -1
  • 刚刚注意到 === 和 == 一样吗
  • 它被称为“严格等于”,对于实际对象(不是字符串或数字等简单类型),它比较“实例”相等性(即,此对象与此对象是否完全相同)并且被一些人认为是最佳实践。查看更多信息:impressivewebs.com/why-use-triple-equals-javascipt
【解决方案3】:

以下应该有效:

var myArray = ['foofy', 'foofa', 'foo', 'awtsy'];

for ( var i = 0; i < myArray.length; i++ ) {
  if ( myArray[i].contains('foo') )
    console.log(myArray[i]);
}

打印: 笨蛋 福发 呵呵

注意:“awtsy”不包含模式 foo

【讨论】:

  • 这会显示 foofy 和 foofa 还是只显示 foo?...抱歉,我现在没有电脑,所以无法尝试...
  • 它将返回所有包含单词 foo 的数组字符串元素。在这种情况下:foofy、foofa 和 foo
【解决方案4】:

下面的函数应该可以解决问题,它只使用标准的 acme 脚本元素

function Find (myarray, searchterm){
    for (var i=0, len = myarray.length; i<len; i += 1){
         if (typeof(myarray[i]) === 'string' && myarray[i].search(searchterm) !== -1){
             // print or whatever
             //hint use a callback here that you pass in as an additional arugment
         }
    }
}

如果您需要检查更复杂的内容,使用搜索允许您使用正则表达式

【讨论】:

    【解决方案5】:

    你也可以试试这个:

    var myarray = ["foofy", "foofa", "foo", "awtsy"];
    var searched_string = "foo"; 
    var foundmatch = [];
    
    for(i=0; i < myarray.length; i++){
      if(myarray[i].match(searched_string)){
        foundmatch.push(myarray[i]);
      }
    } 
    
    alert(foundmatch); 

    【讨论】:

    • 所有答案中最简单的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-04-01
    • 2011-07-31
    • 2010-12-19
    相关资源
    最近更新 更多