【发布时间】:2019-12-31 12:15:10
【问题描述】:
我想知道是否值得将数组转换为集合以便使用 NodeJS 进行搜索。
我的用例是多次进行此搜索,但在大数据集上不是必需的(有时可以在数组中增加约 2000 个项目)。
在列表中查找特定 id。
哪种方法更好:
const isPresent = (myArray, id) => {
return Boolean(myArray.some((arrayElement) => arrayElement.id === id);
}
或
const mySet = new Set(myArray)
const isPresent = (mySet, id) => {
return mySet.has(id);
}
我知道理论上第二种方法更好,因为第一种方法是 O(1) 和 O(n)。但是集合的实例化可以抵消小数组的增益吗?
【问题讨论】:
-
如果搜索过于频繁,IMO 设置肯定会比一些更好,你也不需要明确地将
some的输出更改为布尔值,它始终是boolean值,只有默认 -
你也可以查看 hashMap。搜索数组需要循环,而搜索
Set或HashMap需要查找。对于n项的数组,更糟糕的情况是n迭代,但对于Set/HashMap,它的1。您可以参考:stackoverflow.com/questions/17295056/… -
@CodeManiac 谢谢你的回答!为了清楚起见,这里做了很多搜索,但每次都在不同的数组上。对于每次搜索,都会导致新集合/哈希图的实例化。我可能会尝试发布此差异并告诉我是否看到性能有任何改进。
-
如果你每次都构建一个新的
Set,那肯定不是更好。Set构造遍历整个数组,然后执行更多操作,但数组搜索遍历数组的一小部分。 -
@Pierre-LouisLacorte 如果您每次搜索时都有新数组,那么创建
Set使用binary search or any other suitable algo没有任何意义,但是如果数组发生变化,可以通过添加或删除一个来表示或前一个数组中的更多 id,而不是您可以在初始数组上使用Set并且要添加删除 id,您可以使用Set本身并在需要时搜索值
标签: javascript arrays node.js optimization set