0

这是我昨天问的一个问题的延续,我问了如何确定输入是否与数组元素的任何部分匹配('sun' & 'sunday' = 'sun')。这是解决方案。

var _array = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];

for (var i = 0; i < _array.length; i++) {
    if (_val.indexOf(_array[i]) != -1) {
        $('span').text('it worked');
        return;
     }
}

$('span').text('nothing');  

然而,我刚刚意识到,如果为真,我需要将它与关联数组中的全名值匹配。例如:如果您输入 ('sun'、'sund'、'sunda' 或 'sunday'),它会返回 'sunday'。理想情况下,它不区分大小写,但我可以自己解决。

var _array = {
    "sun" : "sunday",
    "mon" : "monday",
    "tue" : "tuesday",
    "wed" : "wednesday",
    "thu" : "thursday",
    "fri" : "friday",
    "sat" : "saturday"   
};

这是解决方案的第二部分。我意识到我可以else { $('p').text(''); }在这个例子中删除,但这在我的项目代码中不起作用。

4

3 回答 3

1

如果我从您之前的问题中了解到,如果文本输入的任何部分与数组中的项目匹配,那么它被认为是匹配的。

现在您似乎想将短数组版本映射到一个完整的单词。

如果这听起来不错,您可以从数组中获取短值,并创建一个短到长版本的映射。

var map = {
   sun: "sunday",
   mon: "monday",
   tue: "tuesday",
   wed: "wednesday",
   thu: "thursday",
   fri: "friday",
   sat: "saturday"
};

然后获取数组值,并将其作为键传递给映射。

var _array = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];

_val = _val.toLowerCase();

for (var i = 0; i < _array.length; i++) {
    if (_val.indexOf(_array[i]) != -1) {
        $('span').text('it worked');
        alert(map[_array[i]]);  
        return;
     }
}

您还说您希望它不区分大小写,所以我将 toLowerCase() 添加到 _val。

于 2012-08-16T01:21:42.987 回答
1
function parseDay(val) {
    val = val.toLowerCase();
    var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
    for (var i = 0; i < days.length; i++)
        if (days[i].indexOf(val) == 0)
            return days[i];
}

parseDay('sun'); // 'sunday'
于 2012-08-16T01:27:53.513 回答
0

听起来你需要使用.match()

示例:http: //jsfiddle.net/t5pP8/

于 2012-08-16T01:22:28.047 回答