gpt4 book ai didi

javascript - 为IE优化一个简单的double for循环

转载 作者:行者123 更新时间:2023-11-30 13:34:03 24 4
gpt4 key购买 nike

array.sort(function(left, right) {
return index(otherArray, left) < index(otherArray, right);
});

这是 O(len(array) ^ 2) 因此对于 len = 1000 的合理大小的数组,这需要常量 * 100 万次操作,这很容易超过 IE 500 万操作符的上限。

因此 IE 抛出一个脚本花费太长时间,即使这很快。

问题是 IE 没有它自己的 Array.prototype.indexOf 所以我不能将操作计数减少到 O(len(array) 并且rely 而不是最终使用双 for 循环而不是单个 for 循环。

我考虑过 array.join 并使用 String.prototype.indexOf,但数组中的对象是 DOM 元素,您无法(轻松)将它们转换为字符串。

告诉 IE 用户删除此默认上限不是一种选择。

最佳答案

我可以想到两个可能的解决方案来解决这个问题:一个可以在任何地方工作,另一个完全是 IE 专有的(我预计在 IE9 中不起作用,但支持 Array.prototype。 indexOf,所以这不是问题)。

第一个更简单的解决方案是在每个 HTMLElement 上设置一个所需顺序的属性并按此排序。如果您关心所需的顺序持续存在,则必须确保 HTMLElement 对象不会被垃圾收集,因此您必须保留对它们的引用(在全局范围内创建一个数组可能是最简单的为此)。

仅 IE 的解决方案是使用查找对象和 HTMLElement.uniqueID 执行类似于@maclema 提议的操作:

var otherArrayLookup = {};
for (var i=0; i < otherArray.length; i++) {
otherArrayLookup[otherArray[i].uniqueID] = i;
}

array.sort(function(left, right) {
return otherArrayLookup[left.uniqueID] < otherArrayLookup[right.uniqueID];
});

对于 Array.prototype.indexOf 支持的情况,您需要在其中添加一些分支(不要在回调函数中放置任何分支,而是使用不同的回调函数),HTMLElement.uniqueID 支持的大小写,以及非上述情况。

关于javascript - 为IE优化一个简单的double for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634383/

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