【发布时间】:2016-03-24 00:35:21
【问题描述】:
我有一个 JSON 对象数组,我想找到具有特定属性的对象。我知道这可能看起来像一个重复的问题,但请继续,因为我认为它与之前的问题略有不同。
与我一起工作的一个人建议使用 IndexOf,这让我开始思考。有没有类似于 mongo 中的 $elemMatch 功能的东西?是否有一些命令基本上用伪代码表示“从这个数组中获取具有此属性的对象”?随着迭代,我觉得伪代码说“看看这个数组中的第一个对象。如果这个对象有这个属性,给我这个对象。如果没有,看看这个数组中的第二个对象...... "
我了解如何使用我朋友建议的 IndexOf,但我越想越开始认为 IndexOf 方法可能代码行数更少,但它最终是否必须遍历数组来找到我需要的索引?所以如果我想用这个属性对对象做一些事情,并且我使用 IndexOf 方法来获取索引,我会像 myArray[indexFromIndexOfMethod] 这样引用对象,然后相应地修改它,对吗?因此,如果 javascript 正在遍历数组本身以执行 IndexOf 方法,为什么我不编写自己的迭代并保存一个步骤?现在,如果 IndexOf 方法使用一种比仅迭代和检查每个元素更有效的方法来定位数组元素,那么使用它对我来说是有意义的。否则,如果您可以通过简单的迭代获得相同的结果,那么使用 IndexOf 方法没有意义。
【问题讨论】:
-
我需要更好地解释为什么使用
indexOf“没有意义”,因为您可以编写自己的迭代并复制已经编写的代码。 -
不确定不使用
indexOf会如何为您节省任何费用。有了它,您不必编写循环,它会为您完成循环。 -
但是我想使用该对象执行的操作可能发生在该对象位于数组中的那一刻。因此,如果我编写自己的迭代,我可以将所有这些内容添加到函数中。如果我使用 IndexOf,javascript 将尽一切努力找到我正在寻找的元素的索引,然后当它完成时,我可以使用生成的索引来获取该对象。因此,如果 IndexOf 不比迭代更有效,我可以将这两个步骤合二为一。
-
通过索引访问数组元素是如此之快,你永远不会注意到差异
-
jsperf 稍微支持
indexOf。但如前所述,这仅在我们与完全相同的对象进行比较时才有效。如果您要基于标识属性搜索不同但相同的对象,indexOf将失败,但所有其他情况都可以。
标签: javascript arrays performance mongodb indexof