我有一个如下所示的数组:["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的元素(包括该元素)匹配,那么如何访问该数组字符串的元素?并将它们作为字符串加入?
答案 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.splice
和Array.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的数组中的每个元素,而不是尝试将其作为数组访问。