Javascript:尽管数组稀疏,但 indexOf 在高索引上还是很慢?

标签 javascript arrays performance google-chrome indexof

在我的网站上运行一些测试时,我最终得到一个数组,其中只有 10 个字符串,但索引非常高 (600 000 000)。

在此数组上运行 indexOf 非常慢,每次调用都会使整个选项卡卡住几秒钟。

当我尝试查找有关此的信息时,大多数人似乎都在说现代 Javascript 实现使用稀疏数组,这应该不是问题。我使用的是最新的 Chrome 62。

该问题实际上仅在开发人员工具的控制台中重现。如果您尝试运行以下代码:

test = [];
test[600000000] = "test";
test.indexOf("test");

您会看到控制台需要几秒钟才能返回索引,这表明 Javascript 正在循环遍历从 0 到 600000000 的每个索引,而不是直接跳到一个元素。这是正常行为吗?

最佳答案

我不确定这是否是“正常”行为,但一个简单的替代方法是:

function sparseIndexOf(arr, value) {
    return Object.keys(arr).find(function(k) {
        return arr[k] === value;
    })
}

test = [];
test[600000000] = "test";
sparseIndexOf(test, "test")

关于Javascript:尽管数组稀疏,但 indexOf 在高索引上还是很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47664826/

相关文章:

Java:从数组中划分对

c# - linq 的优化或替代(用于聚合)C#

javascript - 有条件地操作数组中元素的属性

php - 解释一下,一个或多个数组php?

javascript - 为什么使用 jQuery 元素包装元素要快得多

c# - StackFrame 的性能如何?

javascript - 不确定如何在单击 div 外部时隐藏 div

javascript - 使用 jQuery 从 JSON 生成图像列表,图像绑定(bind)到点击事件

javascript - if语句中的异步调用最终执行else语句

javascript - 提交 mailchimp subscribe php 后我有一个空白页面