检查Javascript数组以查看值是否以特定值开头

时间:2014-04-11 02:14:51

标签: javascript jquery arrays map

我正在尝试浏览数组并检查是否有任何数组元素以某​​个值开头。

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]

2 个答案:

答案 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循环的答案,那就可以了。