For-Of L oop против For Loop - PullRequest
       12

For-Of L oop против For Loop

0 голосов
/ 30 марта 2020

Являются ли эти два одинаковыми или взаимозаменяемыми?

В каких случаях можно выбрать один из других?

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

ПРИМЕР

Завершите решение, чтобы функция разбила верблюжий корпус, используя пробел между словами.

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

Если мы использовали это Например, помимо повышения производительности (если есть), зачем кому-то использовать один l oop над другим?

Если есть другие примеры / примеры, которые также были бы хороши.

1 Ответ

2 голосов
/ 30 марта 2020

Немного отступления, чтобы объяснить ваш вопрос:

В Javascript объекты (среди них и массивы) хранят свойства в парах ключ-значение . Это означает, что каждое назначенное значение имеет ключ (имя свойства) для доступа к нему. Например, в

person[name] = 'Tom'

person это объект, name ключ и 'Tom' соответствующее значение.

Массивы используют индексы (то есть числа) в качестве ключей:

array[5] = 10

Теперь учтите это в следующем объяснении.

Давайте начнем с традиционного для l oop:

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

Этот способ перебора массива является самым старым из множества (если вы не используете циклы while). Вы найдете соответствующий способ написания для l oop практически на любом (императивном) языке программирования. Вы заметите, это очень явно в том, как это работает. Например, вы можете изменить условие прерывания i < array.length на что-то другое (например, i < array.length-1 для пропуска последней позиции) или шаг i++ (например, на i+=2), или начать с другой индекс (например, let i = 5). Вы можете выполнять итерацию в обратном направлении вместо массива, если хотите. Практически все, что вы можете сделать в другом для l oop, вы можете сделать и в этом роде, если знаете, как.

Внутри скобок {...} вы можете использовать i в качестве ключ для доступа к массивам значения

Теперь все это очень мощно и приятно, но писать каждый раз становится громоздким, особенно если в большинстве случаев вы просто хочу перебрать массив. Но, к счастью, у нас есть 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) {...}

Однако, с одной стороны, они будут работать только с так называемыми повторяемыми объектами ( массивы повторяемы). Во-вторых, вы получаете только значения . Они больше не будут давать вам ключи!

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

logs 'a', 'b' и 'c'. Вы больше не будете знать, какие ключи имели эти значения!

Итак, когда их использовать? Каждый раз, когда вам просто нужны значения и не заботятся о ключах. Например, если вы просто хотите напечатать значения. Когда их не использовать? Если вы хотите поменять местами элементы массива, если вы хотите изменить порядок. Вы даже не можете увеличивать значения на 1 и сохранять их обратно в массив, потому что для этого вам нужно знать их соответствующий ключ.

Для получения дополнительной информации о циклах for-in, а также о том, что можно повторять. на самом деле означает, опять же, я рекомендую MDN

...