【问题标题】:For-Of Loop vs. For LoopFor-Of 循环与 For 循环
【发布时间】:2020-07-10 11:48:14
【问题描述】:

这两个是相同的还是可以互换的?

有哪些用例会让人选择其中一个?

for(let i of array){some code}
for(let i = 0; i < array.length; i++){some code}

示例

完成解决方案,以便该函数使用单词之间的空格打破驼峰式大小写。

solution("camelCasing") == "camel Casing"

如果我们使用这个例子,除了性能优势(如果有的话),为什么有人会使用一个循环而不是另一个?

如果还有其他例子/实例也很好。

【问题讨论】:

  • 在第一种情况下,i 将是数组包含的任何项目。在第二个中,i 将是数组的索引。所以,不 - 它们不可互换。为什么他们呢?
  • @VLAZ 那么第二个示例是否更类似于for-in 循环?
  • this 的情况下,是的。但在一般情况下,forfor-infor-of 有不同的用途。
  • 我总是使用for..of 循环,因为它们写起来更快,更容易阅读。然后,如果您无法使用它实现某些目标(例如,向后迭代,或仅每隔一个元素),则回退到 for。不过只是我的 2 美分。

标签: javascript arrays string for-loop for-of-loop


【解决方案1】:

有点后知后觉来解释你的问题:

在 Javascript 中,对象(其中包括数组)以 key-value 对的形式存储属性。这意味着每个分配的值都有一个键(属性名称)来访问它。 例如在

person[name] = 'Tom'

person 是 Object,name 是键,'Tom' 是对应的值。

数组使用索引(即数字)作为键:

array[5] = 10

现在,在下面的解释中记住这一点。

让我们从传统的for循环开始:

for(let i = 0; i < array.length; i++) {...}

这种迭代数组的方式是最古老的(只要你不使用while循环) 您会发现用几乎任何(命令式)编程语言编写 for 循环的相应方法。您会注意到,它的工作方式非常明确。例如。您可以将 break-condition i &lt; array.length 更改为其他内容(例如 i &lt; array.length-1 用于跳过最后一个位置)或步骤 i++(例如更改为 i+=2),或者从不同的索引(例如let i = 5)。如果需要,您可以在数组中向后而不是向前迭代。几乎可以在另一个 for 循环中执行的任何操作,如果您知道怎么做,您也可以在这种循环中执行。

在括号 {...} 内,您可以使用 i 作为 key 来访问数组 values

现在这一切都非常强大和漂亮,但每次都编写起来很麻烦,尤其是在大多数情况下,您只想遍历数组。但幸运的是,我们有 for-in:

For-in 将检索您自己设置的所有。使用数组,您可以使用它来实现与上述相同的结果

for(let i in array) {...}

但是请注意,for-in 不仅会为您提供数组中的数字键。它也适用于您在任何对象上设置的其他键:

let object = {
    key1 : 'value',
    key2 : 'value'
}

for(let i in object) {
    console.log(i)
}

将注销'key1''key2'(是的,这里的键也是字符串)。

如需更准确地描述它将为您提供哪些键,请查看下面的链接。

什么时候使用 for-in?每当您想为数组的每个元素/(几乎)对象的每个属性调用一次代码时。例如。当您想将数组中的所有值递增 1 时。 什么时候不使用for-in?如果您需要对遍历数组的顺序进行更精细的控制,或者您不想点击数组的所有元素,而只想每秒钟/三次点击一次,请不要使用它。

对于 for-in 循环的优秀资源,我推荐 Mozilla Developer Network

那么,什么是 for-of 循​​环呢?

For-of 循环在语法上(即您编写它们的方式)与 for-in 循环非常相似:

for(let v of array) {...}

然而,一方面,它们只适用于所谓的 iterable 对象(数组是可迭代的)。其次,您只能获得。他们不会再给你任何钥匙了!

let array = ['a', 'b', 'c']
for(let v of array) {
    console.log(v)
}

记录'a''b''c'。你不会再知道这些值有什么键!

那么,什么时候使用这些?每次您只需要值而不关心键时。例如。如果您只想打印值。 什么时候不使用它们?如果要交换数组的元素,如果要反转顺序。您甚至不能将值加 1 并将它们存储回数组中,因为为此,您需要知道它们对应的键。

有关 for-in 循环以及可迭代的实际含义的更多信息,我再次推荐MDN

【讨论】:

  • 我不断听到其他人不要对数组使用for-in 循环,也许与原型链有关?另外,是否有替代使用该循环来查找密钥的方法?
猜你喜欢
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 2018-01-20
  • 1970-01-01
  • 2015-08-28
  • 2020-12-24
相关资源
最近更新 更多