如何使用JavaScript高效地搜索数组中的特定值

如何使用JavaScript高效地搜索数组中的特定值,javascript,arrays,database,Javascript,Arrays,Database,我想知道如何使用JavaScript搜索大数组 假设我们有一个由表示业务的元素组成的数组。数组中有几千个元素,它们是有时也包含数组的对象 在这些元素中的每一个元素中都有一个键,例如名为category的键,看起来像这样的类别:[“attr1”、“attr2”、“attr3”]。现在,我只想找到数组中具有如下类别的元素: category: ["Restaurant"] 问题是数组中元素的其他键有时也有一个属性,其中名称中的“Restaurant”后跟其他内容,例如“RestaurantPric

我想知道如何使用JavaScript搜索大数组

假设我们有一个由表示业务的元素组成的数组。数组中有几千个元素,它们是有时也包含数组的对象

在这些元素中的每一个元素中都有一个键,例如名为category的键,看起来像这样的
类别:[“attr1”、“attr2”、“attr3”]
。现在,我只想找到数组中具有如下类别的元素:

category: ["Restaurant"]
问题是数组中元素的其他键有时也有一个属性,其中名称中的“Restaurant”后跟其他内容,例如“RestaurantPrice”,所以

不会正常工作,因为它会返回所有出现的“餐厅”一词,还是我错了


如果不是,我应该如何在数组中搜索特定的内容?

如果
类别
是类似
[“foobar”,“foo”]

categories.indexOf(“foo”)
将返回
1
foobar将被忽略

另一个问题是
如何找到高效的元素?

这取决于,如果您的集合是静态的,您可以预构建和缓存某种索引,如:

var categoriesMap = {
  foobar: [1, 2, 4],
  foo: [1, 5, 7]
}

数组将表示项目的索引,其中包括给定的类别。

如果您的键是唯一的,请尝试使用哈希映射。

String.indexOf
匹配子字符串
Array.indexOf
匹配数组中的(整个)元素。你甚至没有测试过这个,是吗?你甚至不知道它的存在
var categoriesMap = {
  foobar: [1, 2, 4],
  foo: [1, 5, 7]
}