Недавно я потратил некоторое время на то, чтобы разобраться в некоторых основных (но ключевых) элементах Javascript. И я должен признать, что не мог перестать сравнивать с Руби. Всегда полезно учиться с небольшим сравнением, поэтому эта краткая запись с акцентом на синтаксис Javascript. Вот оно тебе :)
Одно из ключевых различий, которое мне удалось уловить, заключается в том, что методы Ruby будут вызывать заданный блок для каждого элемента в массиве, в то время как Javascript применяет функцию к повторяемому элементу. Несколько примеров ниже…
Каждый…
Учитывая массив, «каждый» каким-то образом может помочь разработчикам пройти через него и обычно используется для создания совершенно нового массива для каждого элемента в массиве. Судя по синтаксису, Javascript немного «сложнее», учитывая тот факт, что Ruby спроектирован так, чтобы быть англоязычным. То же относится и к точному использованию каждого из них. Javascript позволяет использовать значения массива, его индексы и сам массив с forEach. С другой стороны, в Ruby есть 2 отдельных итератора, служащих одной и той же цели: каждый позволяет выполнять итерацию по массиву, однако, если вам понадобятся индексы - в одно и то же время - вам нужно будет использовать each_with_index. Вот пример Javascript:
[“This”,”is”,”an”,”array”,1,2,3,”£”].forEach(function(item, index, array) { console.log(“Current item is “ + item + “ at index “ + index + “ for array “ + array); }) //Current item is This at index 0 for array This,is,an,array,1,2,3,£ //Current item is is at index 1 for array This,is,an,array,1,2,3,£ // and so on…
Важно отметить, что Ruby позволяет отображать! который изменяет исходный массив, в то время как Javascript не предоставляет этого (если исходный массив не был намеренно изменен)
Карта…
Карта помогает нам перебирать массив, однако для всех элементов исходного массива создается совершенно новый массив, сопоставленный с некоторым другим значением. Подобно каждому из них, Javascript делает индекс доступным для использования как часть карты (при необходимости). Вот пример Javascript (на этот раз с функцией стрелки вместо традиционного синтаксиса обратного вызова):
[“This”,”is”,”an”,”array”,1,2,3,”£”].map((item,index)=>{ console.log(`${item} at index ${index}`); }) //This at index 0 //is at index 1 // and so on…
Подобно каждому из них, Ruby также предоставляет карту! который изменяет исходный массив, в то время как Javascript не имеет аналогичного итератора.
Выбор Ruby против фильтра Javascript…
Функциональность select не сильно отличается между Javascript и Ruby. Как «обычно» Ruby позволяет изменять исходный массив (с помощью select!), А Javascript - нет. Javascript продолжает делать индекс и полный массив доступными для операции
[“This”,”is”,”an”,”array”,1,2,3,”£”].filter(function(item){ return Number.isInteger(item) }) //[1,2,3]
Из-за структурных различий между Ruby и Javascript, когда используется итератор, Ruby возвращает исходный массив (даже если никакая операция не выполняется), а Javascript возвращает «undefined».
Дополнительная литература и ссылки
Я сделал краткое описание выше, так как мне было трудно понять ключевые различия. Важно отметить, что четкие ссылки на итераторы Ruby и Javascript находятся здесь:
- Для Ruby: Документы API Ruby.
- Для Javascript: документы Mozilla Developer Network (MDN).
Удачного обучения!