Pull to refresh

Comments 29

Понимаю, что перевод, но всё-таки переменную в for...of лучше сделать локальной.
Вот так:


const toolBox = ['Hammer', 'Screwdriver', 'Ruler'];

for (let item of toolBox) {
  console.log(item);
}

А еще лучше и неизменяемой.


const toolBox = ['Hammer', 'Screwdriver', 'Ruler'];

for (const item of toolBox) {
  console.log(item);
}
Хм… ничего нового, все это можно в интернете найти на английском языке и без промо в футере.
И это в блоге компании занимающейся VDS/VPS…
все это можно в интернете найти на английском языке
И искать не надо, здесь все есть, на русском, подробно и с более удачными примерами, так же указана совместимоть методов с версиями браузеров.
И это в блоге компании занимающейся VDS/VPS…
Видимо имеют в виду: Покупайте сервер, и разворачивайте сайт на node.js

Код картинками это очень красиво и стильно!

Это чтобы не копипастили )
можно всю статью тогда картинкой разместить
Тогда слишком много весить будет, нужен баланс.
и картинку запретить сохранять
Для этого даже уже всё готово: Instagram, лучший сервис для хостинга фрагментов пропиетарного кода! Заодно фотки еды с трона потеснит.
Метод reduce(), в его простейшем виде, позволяет суммировать элементы числовых массивов. Другими словами, он сводит массив к единственному значению.

В простейшем виде он именно что сводит массив к единственному значению, про суммирование — в лучшем случае распространенный пример.
Кстати, это "единственное значение" вполне может быть другим массивом, что позволяет делать filter + map за один проход без мудреных концепций типа Y-комбинаторов и т.п.

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

Я-то собственно как раз хотел обойтись без слов типа скаляр и катаморфизм:)

Понимаю, что перевод но все же примеры кода не удачные. Например, что делает вот эта строчка (и другие похожие):
age.some(person => person >= 18);

Понятно, что консоль выведет результат вычисления (просто консоль так задумана).
Но это ведь не явно. Глядя на код — это мертвая строчка, которая просто будет жрать ресурсы. А как именно использовать этот метод не ясно.
Пара вариантов
const age = [16, 17, 18];
const adultPresent = age.some(person => person >= 18);
console.log(adultPresent);

или
const age = [16, 17, 18];
const adultPresent = age.some(person => {
  if (person >= 18) {
    console.log(true);
    return true;
  }
});



Не соглашусь. При наличии описания, примера вызова и результата работы вызов console.log(...) не делает код ничуть понятнее, а только захламляет его.
Расширенный пример показывает, как использовать some() в рабочем коде, а не в консоли. Конечно, можно сказать, что получение и использование результата функции не является чем-то требующим объяснений, но тогда и примеры кода ни к чему — из описания аргументов и результата функции вполне понятно, как её можно использовать.
Первый пример не показывает весь смысл такого использования — проще же .join() использовать для обычного массива

ИМХО нужно было показать в таком стиле:
let a = [{a: 1}, {b: 2}]
console.log(...a)
// -> {a: 1} {b: 2}
console.log(a.join('  '))
// -> [object Object] [object Object]
Господи, до чего же страшен этот стрелочный синтаксис…
Статья называется «Полезные приёмы работы с массивами», в самой статье описаны стандартные методы в базовых примерах, да и то не все, пара операторов и ни одного «полезного приема».
Если авторы оригинала хотели удивить читателей удобным синтаксисом и возможностями ES6, то они года на три опоздали.
А если map/reduce — то лет на 10 наверное…

Прошу прощения, что придираюсь (да и это перевод, не здесь надо делать замечания), но хотелось бы хотя бы в комментарии добавить про forEach (а то про for..of написано, про map написано, а про forEach — нет). Плюс стоит упомянуть про reduceRight (хотя бы через слэш после reduce). И в одном из примеров по моему мнению не хватает второго необязательного аргумента для reduce, который задаёт начальное состояние результирующей переменной (часто использую).

А на сколько map быстрее перебора foreach? У меня нарисовалась задача по перебору массива и добавлению новый в ~300 000 элементов на клиенте и с использованием невыносимо долго около 2 — 3 минут…

Если хотите ускорить процесс — используйте
for(let i = 0; i < yourArray.length; i++) {}
Это — самый быстрый вариант цикла:
jsperf.com/fast-array-foreach
С тех пор (тест 2012-го года, но можно найти и тесты недельной давности — результат будет схожим) хоть и обещали оптимизировать forEach/map в V8-движке, но до сих пор весомых результатов так и не добились.

forEach/map — это удобно, но при их использовании приходится жертвовать производительностью. Сейчас с нынешними возможностями ПК и мобильных устройств это зачастую не критично, но на больших объёмах данных, где падение скорости выполнения цикла в 6 раз — критичный момент (вместо, например, 2-х секунд выполнения процесс обработки займёт 12), стоит пренебречь удобством в пользу скорости выполнения. То же касается и остальных функций, представленных в статье выше.

Спасибо, попробую на for перевести цикл… Вообще удивительно конечно. У нас в проекте встречаются таблицы для заполнения размером 20 х 50, 200 х 200, разок было 2000 х 20, работало относительно нормально (крайний случай проглатывался на слабых компьютерах за одну минуту). Новая форма 250 х 2000 и у отдельных пользователей все встаёт раком (по другому и не сказать) до 20 минут с многократными предупреждениями о долгом исполнении в результате данные "бьются".
По уму это будет прекрасно работать на vue когда новый набор (строка) будет писаться в виде нового массива данных во внутрь большего набора по факту новой строки, а большой массив уже прекрасно пройдёт сериализацию для отправки на сервер

for(let len = yourArray.length, i = 0; i < len; ++i) {}

:)

Всем этим очень аккуратно нужно пользоваться, если подразумевается хоть какая-то поддержка IE. Надо бы хотя бы вскользь упомянуть, что как минимум includes() и of() в нем не поддерживается.

Аккуратно нужно пользоваться reduce, потому что это рекурсия в чистом виде и в памяти сохраняются все аргументы массива и возвращаемые значения, при работе с большим набором данных эта функция может не слабо подвесить систему

Насколько я понимаю, рекурсия хвостовая, т.е. не должно быть особо критично
ощущение что автор специально вариант ES6 короче написал
так бы не сильно от старого отличался)
age.some(person => 

   person >= 18

);
Sign up to leave a comment.