javascript在数组中查找具有特定属性的对象

javascript在数组中查找具有特定属性的对象,javascript,arrays,object,Javascript,Arrays,Object,我需要对现有代码进行扩展,无法更改。 有一个数组: var availableTags = [ { label: "Yoga classes", category: "EDUCATIONAL" }, { label: "Cooking classes", category: "EDUCATIONAL" }, { label: "Cheese tastings", category: "EDUCATIONAL" }, { label:

我需要对现有代码进行扩展,无法更改。 有一个数组:

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
];
现在我需要检查输入框中输入的文本是否包含在其中一个标签中,例如,如果用户输入“瑜伽课程”=>OK,如果“瑜伽”=>NOK,“SDF”=>NOK,等等


最好的方法是什么?我不确定我是否可以使用Array.indexo如果我不确定如何将对象传递给函数,我会尝试在数组中循环(大约40个条目)并比较每个对象。

您需要循环检查
availableTags
中的每个项目,并检查该项目的
标签是否等于某些输入。试着这样做:

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);
演示:

如果您想查看任何
标签
s是否包含输入,可以使用
indexOf
如下:

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

演示:

您需要循环查看
可用标签中的每个项目,并检查该项目的
标签是否等于某些输入。试着这样做:

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);
演示:

如果您想查看任何
标签
s是否包含输入,可以使用
indexOf
如下:

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

您可以使用以下方法:

测试数组中的某些元素是否通过所提供函数实现的测试

然后,您的代码将类似于:

var isFound = availableTags.some(function(el) {
    return el.label === 'Yoga classes';
});
注意:方法需要加垫片。

您可以使用方法:

测试数组中的某些元素是否通过所提供函数实现的测试

然后,您的代码将类似于:

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

注意:方法需要加垫片。

你必须在数组中循环并检查每个对象,然后在找到它时停止。你必须在数组中循环并检查每个对象,然后在找到它时停止。你必须在数组中的每个对象上运行该测试,直到它找到正案例-性能将很差,特别是在较大的阵列上。但这是一个非常优雅的:)同意性能问题。40个条目不是太多,所以我想我可以接受。
一些
只在回调返回true之前不会检查所有对象。你必须在数组中的每个obj上运行该测试,直到它发现正的大小写-性能将很差,特别是在较大的阵列上。但这是一个非常优雅的:)同意性能问题。40个条目不是太多,所以我想我可以接受。
一些
不会检查所有对象,直到回调返回true。我放弃。循环是最快的。indexOf还执行循环,但它增加了额外的类型检查和其他一些开销。最新的Chrome似乎针对大型阵列中的indexOf进行了优化,但这种优化并不是在所有浏览器中都是一致的。循环是最快的。indexOf还执行循环,但它增加了额外的类型检查和其他一些开销。最新的Chrome似乎针对大型阵列中的indexOf进行了优化,但这种优化在所有浏览器中并不一致。