我知道循环数组arr
的经典方法是:
for(var i=0 ; i<arr.length ; i++) {
// code
}
但最近有人向我展示了在该循环中实现条件的不同方法,如下所示:
for(var i=0 ; arr[i] !== undefined ; i++) {
我认为这个解决方案很有意思,因为这正是您在循环数组时所需要的:当您尝试访问未定义的索引时,您不想获得undefined
。
我意识到,如果你计算它看起来更长的字符,并且你可能会遇到像这样的数组有问题:["Hello", , "World"]
,但除此之外 - 还有什么我在这里缺少的?为什么我们不应该使用这种技术呢?
答案 0 :(得分:3)
为什么我们不应该使用这种技术呢?
undefined
值的数组.length
在循环期间保持不变)undefined
identifier could be overwritten,您需要使用typeof
)cource,它是&#34;工作&#34;对于你取决于用例,有时你可能想要使用它。大多数情况下,你根本就没有。
即使两种方式都适用于您的情况,使用标准方法(i<arr.length
)也是一种更好的做法,因为心理开销较低。每个人都认识到这种模式并知道它的作用,而arr[i]!==undefined
时,人们需要思考为什么选择这种不常见的方法。
答案 1 :(得分:1)
有时数组的值为空,您的迭代方式也会失败。
var arr = [];
arr[5] = 5;
for (var i = 0; arr[i] !== undefined; ++i) {
console.log(arr[i]);
}
console.log('done');
如果你想迭代实数组值并跳过undefined
,我建议你先过滤数组,然后再进行迭代。所以你的代码会更容易理解。示例:
var arr = [];
arr[5] = 5;
arr.filter(Boolean).forEach(function (e) {
console.log(e);
});
console.log('done');