访问包含某些字符串的字符串数组中的元素

时间:2014-06-18 18:52:37

标签: javascript jquery arrays

我有一个如下所示的数组:["whatWP", "isVBZ", "theDT", "temperatureNN", "inIN", "bostonNN"]

我想访问包含IN的元素(如果存在)和下一个元素,直到我到达并包含一个带有NN的元素。并将这些元素连接成一个字符串。

当我尝试像这样访问包含IN的元素时,我得到-1表示没有包含IN的元素。

以下是我尝试这样做的方法:

strARR = ["whatWP", "isVBZ", "theDT", "temperatureNN", "inIN", "bostonNN"];
strARR[strARR.indexOf('IN')];

然后我得到了未定义,因为-1处没有任何内容。

如果它包含IN和每个元素之后,如果它与包含NN的元素(包括该元素)匹配,那么如何访问该数组字符串的元素?并将它们作为字符串加入?

5 个答案:

答案 0 :(得分:2)

你需要一个for循环:

var strARR = ["whatWP", "isVBZ", "theDT", "temperatureNN", "inIN", "bostonNN"];
var foundStr = null;
for (var i = 0, cString; i < strARR.length; ++i) {
     cString = strARR[i];
     if (cString.indexOf("IN") !== -1) {
         foundStr = cString;
         break;
     }
}

if (foundStr !== null) {
   /* do someting with found string */
}

strARR[strARR.indexOf('IN')]返回了一个奇怪的值,因为:

strARR.indexOf('IN') // returns -1 (no string "IN" in the array)
strArr[-1] // undefined

答案 1 :(得分:1)

您需要单独评估数组中的每个元素,而不是整体评估数组。每个都使用jQuery,你可以这样做:

var containsIN = '';
$.each(strARR, function(){
    if($(this).indexOf('IN') !== -1){
        containsIN = $(this);
    }
});

要实现追加或连接字符串,直到找到包含“NN”的字符串 您需要将原始if条件修改为:

if(containsIN === '' && $(this).indexOf('IN') !== -1)

然后添加另一个条件

if(containsIN !== ''){
    final += $(this);
}

然后,终止每个:

if($(this).indexOf('NN') !== -1){
   return false;
}

因此,最终代码应如下所示:

var containsIN = '';
var final = '';

$.each(strARR, function(){
        if(containsIN === '' && $(this).indexOf('IN') !== -1){
            containsIN = $(this);
        }

        if(containsIN !== ''){
            final += $(this);
        }

        if($(this).indexOf('NN') !== -1){
            return false;
        }
    });

答案 2 :(得分:1)

没有&#34; IN&#34;该数组中的元素。只是一个&#34; inIN&#34;元素,不完全相等。 (请记住,这可能是一个任意数组,而不仅仅是字符串,因此不会假设他们可以检查字符串内容)

您必须使用标准for(var i = 0; i < strARR.length; i++)循环遍历strARR。 i变量将帮助您找到正确的索引。 然后,要合并结果,请使用Array.spliceArray.join方法。 Splice可以将一个起始索引和项目长度作为参数,Join可以将一个中间字符作为参数,如逗号,放在它们之间。

答案 3 :(得分:1)

您可以使用the Array's filter()功能。如果您需要定位本身不支持filter()的浏览器,则链接页面上会有一个填充。

您可以创建任何您喜欢的过滤条件,filter()将返回符合您条件的数组元素。

var strARR = ["whatWP", "isVBZ", "theDT", "temperatureNN", "inIN", "bostonNN"];

var strARRFiltered = strARR.filter(function(element){
  return element.indexOf("IN") !== -1;
});

alert(strARRFiltered);
这个概念的

Here is an example扩展了一些,包括访问多重匹配和变量过滤器。

答案 4 :(得分:0)

要执行您当前正在尝试执行的操作,代码必须如下所示:

strARR = ["whatWP", "isVBZ", "theDT", "temperatureNN", "inIN", "bostonNN"];
strARR[strARR.indexOf('inIN')];

您需要遍历调用indexOf的数组中的每个元素,而不是尝试将其作为数组访问。