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/

如果您想查看是否有任何labels包含输入,您可以使用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';
});

注意:某些方法需要填充。

于 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 回答