1

既存のコードを拡張する必要がありますが、変更できません。この配列があります:

var availableTags = [
        { label: "Yoga classes", category: "EDUCATIONAL" },
        { label: "Cooking classes", category: "EDUCATIONAL" },
        { label: "Cheese tastings", category: "EDUCATIONAL" },
        { label: "Maker Workshops", category: "PRACTICAL" },
        { label: "Seminars", category: "PRACTICAL" },
        //many more of these
];

ここで、入力ボックスに入力されたテキストがいずれかのラベルに含まれているかどうかを確認する必要があります。たとえば、ユーザーが「Yoga classes」と入力した場合 => OK、「Yoga」 => NOK、「sdsdf」 => NOK などの場合.

これを行う最善の方法は何ですか?オブジェクトを関数に渡す方法がわからないため、Array.indexOf を使用できるかどうかわかりません。配列 (約 40 エントリ) をループして、各オブジェクトを比較します。

4

3 に答える 3

3

すべてのアイテムをループして、そのアイテムが何らかの入力と等しいavailableTagsかどうかを確認する必要があります。label次のようなことを試してください:

var input = "Yoga classes";
var found = false;
for (var i = 0, j = availableTags.length; i < j; i++) {
    var cur = availableTags[i];
    if (cur.label === input) {
        found = true;
        break;
    }
}
console.log(found);

デモ: http://jsfiddle.net/k4cp4/4/

これは、次のように簡単に関数に入れることができます。

var checkMatch = (function () {
    var availableTags = [
        { label: "Yoga classes", category: "EDUCATIONAL" },
        { label: "Cooking classes", category: "EDUCATIONAL" },
        { label: "Cheese tastings", category: "EDUCATIONAL" },
        { label: "Maker Workshops", category: "PRACTICAL" },
        { label: "Seminars", category: "PRACTICAL" }
    ];

    return function (input) {
        var found = false;
        for (var i = 0, j = availableTags.length; i < j; i++) {
            var cur = availableTags[i];
            if (cur.label === input) {
                found = true;
                break;
            }
        }
        return found;
    };
})();

デモ: http://jsfiddle.net/k4cp4/5/

これにより、完全一致がチェックされます。したがって、大文字と小文字を区別しない一致が必要な場合は、次を使用できます。

if (cur.label.toLowerCase() === input.toLowerCase()) {

デモ: http://jsfiddle.net/k4cp4/6/

のいずれかに入力が含まれているかどうかを確認したい場合は、次labelのように使用できます。indexOf

if (cur.label.indexOf(input) > -1) {

デモ: http://jsfiddle.net/k4cp4/7/

于 2013-05-02T13:48:13.537 に答える
2

Array.someメソッドを使用できます。

配列内の一部の要素が、提供された関数によって実装されたテストに合格するかどうかをテストします。

次に、コードは次のようになります。

var isFound = availableTags.some(function(el) {
    return el.label === 'Yoga classes';
});

注:一部のメソッドは shimmed する必要があります。

于 2013-05-02T13:50:23.727 に答える
1
var check = function(item) {    
    for(at in availableTags) {
       if(item == availableTags[at].label) {
          return true;
       }
    }
    return false;
}


console.log(check("Yoga classes"));
于 2013-05-02T13:49:47.143 に答える