繁体   English   中英

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

[英]access elements in array of strings that contain certain strings

我有一个看起来像这样的数组: ["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的元素(包括该元素)之后的每个元素,如何访问该字符串数组的元素? 并将它们作为字符串连接?

您需要一个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

您需要分别评估数组中的每个元素,而不是整体评估数组。 分别使用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;
        }
    });

该数组中没有“ IN”元素。 只是一个“ inIN”元素,并不完全相等。 (请记住,这可能是任何东西的数组,而不仅仅是字符串,因此不假定它们可以检查字符串内容)

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

您可以为此使用Array的filter()函数。 如果您需要定位本机不支持filter()浏览器,则链接页面上有可用的polyfill。

您可以创建自己喜欢的任何过滤条件,并且filter()将返回与您的条件匹配的数组元素。

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

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

alert(strARRFiltered);

这是该概念的示例 ,扩展了一点以包括访问多个匹配项和一个变量过滤器。

要执行您当前要执行的操作,代码将需要像这样:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM