Преимущества map over for loop с точки зрения безопасности

У меня есть смутное представление о том, что означает «обеспечивать неизменяемость», когда я говорю об использовании map поверх цикла for. Потому что вызов Array.prototype.map в массиве не мешает вам изменить исходный массив. Допустим, у нас есть однопоточная асинхронная программа. В этих обстоятельствах есть ли преимущество «неизменности», которое map обеспечивает по сравнению с петлей for?

Я могу представить себе следующий код:

function A() {
    const arr = [1, 2, 3, 4, 5]
    const anotherArr = arr.map((e, i) => {
        arr[i] = 'changed'
        // here goes some asynchronous code
        return e * 2
    })
    // now arr is ['changed', 'changed', 'changed', 'changed', 'changed']
    // and anotherArr is [2, 3, 6, 8, 10]
}

function B() {
    const arr = [1, 2, 3, 4, 5]
    const anotherArr = []
    for (let i = 0, len = arr.length; i < len; i++) {
        anotherArr[i] = arr[i] * 2
        arr[i] = 'changed'
        // here goes some asynchronous code
    }
    // and again:
    // now arr is ['changed', 'changed', 'changed', 'changed', 'changed']
    // and anotherArr is [2, 3, 6, 8, 10]
}

Я предполагаю, что, вероятно, в функции B anotherArr создается вручную перед заполнением. Следовательно, что-то в том же объеме может изменить это до завершения цикла for. Итак, мой вопрос: «Есть ли преимущество использования map по сравнению с циклом for в однопоточной асинхронной среде с точки зрения безопасности»?

Редактирование

Я перефразирую свой вопрос: «Есть ли какая-то неизменность, которую функция Array.prototype.map? обеспечивает (поскольку принадлежит к функциональной парадигме) ». Насколько я понимаю, функция map в javascript не связана с неизменяемостью, речь идет о сокрытии некоторых деталей реализации (как создается результирующий массив). Итак, функция map - это декларативный способ делать что-то. Цикл for является обязательным способ ведения дел (который, я думаю, приносит больше свободы и больше ответственности).

Вы мутируете оригинал в обоих случаях, когда делаете arr[i] = 'changed'.

charlietfl 28.10.2018 01:39

Нет, разница между map и циклом for с push небезопасна. В основном читабельность.

Ry- 28.10.2018 01:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
48
1

Ответы 1

map, reduce, filter, forEach и т. д.

Вышеупомянутые методы, на мой взгляд, хороши для FP (функционального программирования).

Конечно, вы можете использовать их вместо обычного цикла for, но нормальный цикл for быстрее их (https://hackernoon.com/javascript-performance-test-for-vs-for-each-vs-map-reduce-filter-find-32c1113f19d7).

Так что, по моему мнению, если вам не важна производительность, используйте map, reduce и т. д. - это элегантно и получит меньший и более читаемый код.

Другие вопросы по теме