gpt4 book ai didi

javascript - 使用克隆和弹出来迭代数组而不是使用 for 循环有哪些缺点?

转载 作者:行者123 更新时间:2023-12-02 19:20:26 28 4
gpt4 key购买 nike

看起来这种迭代方法比 for 循环快得多:

var arr = window.arr.slice(0),
fruit = arr.pop();
while (fruit) {
fruit = list.pop();
}

如 jsperf 测试所示:http://jsperf.com/loop-iteration-length-comparison-variations/7

我知道克隆数组会占用内存,但如果我在循环遍历数组后立即删除克隆,我还应该担心什么?

最佳答案

主要缺点是:

fruit = arr.pop();
while (fruit) {

如果 fruit 计算结果为 false(即为 null、未定义、0 等),则循环将停止。这对于稀疏数组来说是很糟糕的,例如

var arr = [0,,,,2];

只会循环最后一个成员,然后尝试计算arr[arr.length - 2],发现它返回未定义(它不存在),因此循环结束。这在 for 循环中是可以避免的,因为您可以先测试该属性是否存在(如果需要):

for (var i=0, iLen=arr.length; i<iLen; i++) {

if (i in arr) {
// arr has a property i so do stuff with arr[i]
}
}

因此,pop 方法可能很快,但只有在您确定没有任何值计算为 false 或通过保留计数器终止循环时才可靠:

var fruit, 
i = arr.length;
do {
fruit = arr.pop();
} while (--i)

所以你不妨这样做

do {
fruit = arr[--i];
} while (i);

不用费心去复制。

关于javascript - 使用克隆和弹出来迭代数组而不是使用 for 循环有哪些缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12612353/

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