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');  

ただし、trueの場合は、連想配列のフルネームの値と一致させる必要があることに気づきました。例:('sun'、'sund'、'sunda'、または'sunday')と入力すると、'sunday'が返されます。大文字と小文字を区別しないのが理想的ですが、自分で理解できます。

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

これがソリューションの2番目の部分です。この例ではを削除するだけでよいのelse { $('p').text(''); }ですが、プロジェクトコードでは機能しません。

4

3 に答える 3

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 に答える
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;
     }
}

また、大文字と小文字を区別しないようにする必要があるとのことで、_valにtoLowerCase()を追加しました。

于 2012-08-16T01:21:42.987 に答える
0

使用する必要があるようです.match()

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

于 2012-08-16T01:22:28.047 に答える