微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript中的IndexOf方法比迭代数组更有效吗?

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

我与之合作的人建议使用IndexOf,这让我思考.有什么类似于mongo中的$elemmatch功能吗?是否有一些命令基本上用伪代码表示“从这个数组中获取具有此属性的对象”?通过迭代,我觉得psuedo-code说“看看这个数组中的第一个对象.如果这个对象有这个属性,给我这个对象.如果没有,看看这个数组中的第二个对象….. “

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

解决方法:

Array.prototype.indexOf也只是迭代数组并返回具有匹配值的第一个索引.你可以用循环做同样的事情.它可能会或可能不会比for循环稍快,因为indexOf可以在本机代码中实现,并且与for循环可以进行不同的优化,但没有根本区别.

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

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

然后,这允许您使用byFoo [‘baz’]进行即时访问.

当然,这可能会产生额外的开销,即将这些索引保存在多个副本中,但它会加快阵列访问的速度.你需要权衡利弊.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐