【发布时间】:2013-09-13 09:44:01
【问题描述】:
我正在创建一个数据结构,其中包含我将用来重复检查是否定义了某些值的数据结构。我想出了两种可能的解决方案,我想知道哪个更有效,或者是否有更好的方法:
1) 使用数组:keys = ['key1' , 'key2', 'key3']
我可以像这样创建一个数组,然后使用jQuery.inArray(keyToCheck, keys) > -1 来检查keyToCheck 是否在我的数组中。
2) 使用对象:keys = {key1 : 1, key2 : 1, key3: 1}
我可以创建这个对象,然后使用keys[keyToCheck] || 0 来查看是否定义了keyToCheck。
我不确定的是如何在 javascript 中实现搜索对象,以及它是否比循环数组的 jQuery.inArray 更有效。这些方法之间是否存在性能差异?使用 jQuery 对我来说不是问题,因为其他原因我已经在我的代码中使用了它。
【问题讨论】:
-
正如another question 所说,对象查找至少应该是线性的。
-
您将苹果与橙子进行比较,在数组的情况下,您正在搜索任何键的值,而在对象的情况下,您正在搜索特定的键并忽略价值。如果您改为查找数组中的特定键与对象中的特定键,那将是更接近的比较。
-
对于因主要基于意见而投票结束此问题的人来说,一种方法是否比另一种更有效是一个意见问题,而不是推测。
-
inArray() 非常慢,对象查找非常快,在 V8 中几乎是即时的......关于线性 this 或 that 的理论内容与针对单个用户-land 循环进行竞赛相比毫无意义本机属性查找。无论如何,JIT 会欺骗大多数 C++ 基准测试。如果您希望代码更快,请使用查找表而不是数组。
标签: javascript jquery arrays