我正在尝试浏览数组并检查是否有任何数组元素以某个值开头。
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]
答案 0 :(得分:3)
.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
方法。
答案 1 :(得分:0)
如果有人想要一个非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循环的答案,那就可以了。