我需要对现有代码进行扩展,不能更改它。 有这个数组:
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
];
现在,我需要检查输入框中输入的文字是否包含在其中一个标签中,例如如果用户输入“瑜伽课”=>好吧,如果“瑜伽”=> NOK,“sdsdf”=> NOK等。
最好的方法是什么?我不确定我可以使用Array.indexOf因为我不确定如何将Object传递给函数,我会尝试循环遍历数组(大约40个条目)并比较每个对象。
答案 0 :(得分: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);
DEMO: 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;
};
})();
DEMO: http://jsfiddle.net/k4cp4/5/
这会检查完全匹配。因此,如果您想要不区分大小写的匹配,可以使用:
if (cur.label.toLowerCase() === input.toLowerCase()) {
DEMO: http://jsfiddle.net/k4cp4/6/
如果您想查看label
的是否包含输入,可以使用indexOf
,如:
if (cur.label.indexOf(input) > -1) {
答案 1 :(得分:2)
您可以使用Array.some方法:
测试数组中的某个元素是否通过了由提供的函数实现的测试。
然后你的代码看起来像:
var isFound = availableTags.some(function(el) {
return el.label === 'Yoga classes';
});
注意:some方法需要填充。
答案 2 :(得分:1)
var check = function(item) {
for(at in availableTags) {
if(item == availableTags[at].label) {
return true;
}
}
return false;
}
console.log(check("Yoga classes"));