как минимум не выдает ошибку?
А главный вопрос почему не перезаписываются элементы?
const arr = [ 1 , 2 , 3 ] или arr = [hello', 'world']
arr.forEach((el) => (el = el * 2)) или arr.forEach((el) => (el = el + 'someTextForConcatenation'))
arr // 1, 2 , 3 или 'hello', 'world'
а вот если в массиве объект , тогда спокойно значение el.someProp = можно перезаписати
Правильна ли моя логика немного, что в первом варианте у нас примитив и мы не можем сделать выражения а ля 1 = 1+1 ?
Не совсем. Примитивы передаются по значению, а обьекты по ссылке. Т.е. el никакого отношения к arr не имеет, в el находиться какое-то число на текущей итерации и ты можешь с ним делать какие-то действия, но сам массив ты не мутируешь.
то бишь в пределах итерации могу играться с ним как захочу, но переопределять элемент массива не будет? а с объектами как быть? в el попадает ссылка на объект и изменяя el мы можем менять содержимое объекта на выходе?
el.num и arr[idx] - это конкретные так сказать ячейки и тут ты явно их мутируешь
то бишь в пределах итерации могу играться с ним как захочу, но переопределять элемент массива не будет? Да, если не делаешь так как выше написано
да, понял. Есть ли смысл в подобном?
Не знаю. Я думаю найдется задача когда это будет нужно. Для остального придумали map,reduce
вот и я о том же) спасибо большое
Метод forEach массива не изменяет массив, он просто выполняет итерацию по нему.
Обсуждают сегодня