gpt4 book ai didi

javascript - JavaScript 中的 IndexOf 方法是否比遍历数组更有效?

转载 作者:可可西里 更新时间:2023-11-01 09:11:19 25 4
gpt4 key购买 nike

我有一个 JSON 对象数组,我想找到具有特定属性的对象。我知道这看起来像是一个重复的问题,但请继续,因为我认为它与之前的问题略有不同。

与我共事的一个人建议使用 IndexOf,这让我开始思考。 mongo 中是否有类似于 $elemMatch 功能的东西?是否有一些命令基本上用伪代码表示“从这个数组中获取具有此属性的对象”?随着迭代,我觉得伪代码说“看看这个数组中的第一个对象。如果这个对象有这个属性,给我这个对象。如果没有,看看这个数组中的第二个对象...... "

我理解如何像我 friend 建议的那样使用 IndexOf,但是我想得越多,我开始认为 IndexOf 方法可能代码行数较少,但它最终是否必须遍历对象中的对象数组来找到我需要的索引?所以如果我想用这个属性对对象做一些事情,并且我使用方法 IndexOf 来获取索引,那么我会像 myArray[indexFromIndexOfMethod] 一样引用这个对象,然后相应地修改它,对吗?因此,如果 javascript 遍历数组本身以执行 IndexOf 方法,为什么我不编写自己的迭代并节省一个步骤呢?现在,如果 IndexOf 方法使用一种比遍历和检查每个元素更有效的方法来定位数组元素,那么使用它对我来说就有意义了。否则,如果您可以通过简单的迭代获得相同的结果,那么使用 IndexOf 方法就没有意义。

最佳答案

Array.prototype.indexOf 也只是遍历数组并返回具有匹配值的第一个索引。这与你可以用循环做的事情是一样的。它可能for 循环快一点,也可能不快一点,因为 indexOf 可以用 native 代码实现,并且优化方式与您的 不同for 循环可以,但是没有本质区别。

如果您经常需要尽快访问特定值,则值得通过对象中的该值对它们进行索引。意思是,如果您想经常通过其属性 .foo 查找特定对象,请执行以下操作:

var byFoo = {}
for (var i = 0; i < myArray.length; i++) {
byFoo[myArray[i].foo] = myArray[i];
}

这允许您使用 byFoo['baz'] 进行即时访问。

当然,这可能会增加维护这些索引的多个副本的开销,但它会大大加快数组访问速度。您需要权衡利弊。

关于javascript - JavaScript 中的 IndexOf 方法是否比遍历数组更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com