我正在尝试遍历一个数组,并检查是否有任何数组元素以某个值开头。
var availableForms = new Array("S1", "S2", "S2_2", "S3", "S3_2", "S3_3", "S3_4", "S3_5", "S4");
var classNumber = 1;
var isComplete = $.map(availableForms, function (value, index) {
if($.inArray("S"+classNumber, value) != 0)
{
return true;
}
});
上面的isComplete
应该是true
。
另外,如果是classNumber = 2
,它也应该返回true。基本上,当_
存在时,我只是在检查它们之前的任何内容,但是如果没有_
,那么它就可以匹配它。
现在它只回来了:
[true, true, true, true, true, true, true, true, true]
发布于 2014-04-10 18:18:25
.map()
方法用于构造一个新的值数组,该数组映射到原始值,我不知道为什么要在字符串上使用$.inArray
。
听起来您需要本机.some()
方法。
var availableForms = new Array("S1", "S2", "S2_2", "S3", "S3_2", "S3_3", "S3_4", "S3_5", "S4");
var classNumber = 1;
var isComplete = availableForms.some(function(s) {
return s === "S" + classNumber;
});
只要迭代中至少有一个值从回调中返回一个真正的结果,.some()
就会返回true
,否则返回false
。
您可以轻松地将.some()
修补到旧浏览器中。
如果必须使用jQuery,则使用$.grep
,并比较结果的长度。
var availableForms = new Array("S1", "S2", "S2_2", "S3", "S3_2", "S3_3", "S3_4", "S3_5", "S4");
var classNumber = 1;
var isComplete = $.grep(availableForms, function(s) {
return s === "S" + classNumber;
}).length > 0;
这通常类似于本机Array.prototype.filter
方法。
发布于 2014-04-10 18:36:25
如果有人想要一个非jQuery方法,可以简单地迭代数组:
var availableForms = new Array("S1", "S2", "S2_2", "S3", "S3_2", "S3_3", "S3_4", "S3_5", "S4");
var classNumber = 1;
var isComplete = false;
for (var i = 0;i<availableForms.length;i++){
if (availableForms[i] === "S" + classNumber){
isComplete = true;
}
}
或者,作为另一种方法(也许更好),您可以为availableForms中每个项的前2个字符创建一个数组:
var availableForms = new Array("S1", "S2", "S2_2", "S3", "S3_2", "S3_3", "S3_4", "S3_5", "S4");
var classNumber = 1;
var isComplete = false;
var firstCharacters = new Array();
for (var i = 0;i<availableForms.length;i++){
firstCharacters.push(availableForms[i].slice(0,2));
}
if (firstCharacters.indexOf('S'+classNumber) > -1){
isComplete = true;
}
我相信有很多更好的方法,但这似乎是好的,从我的头。
更新:
我刚刚注意到cookiemonster已经有了一个非jQuery的答案,所以让我修改如下:如果有人想要一个for-循环答案,这就可以了。
https://stackoverflow.com/questions/23002338
复制