Минутка
лишних усложнений и новых концепций.
В JavaScript примитивные значения (числа, например) копируются/передаются «значением», не сохраняя никакой связи с оригиналом. А объекты (например, массив)
передаются «ссылкой» на оригинал.
Судя по неудачной попытке, был расчёт, что изменив
elem
, изменится и его «оригинал» – элемент массива. Но нет. Число возвели в квадрат, но в массиве всё осталось по-прежнему.
Будь
elem
не числом, а объектом, трюк сработал бы.
примерlet arr = [ {x: 1}, {x: 2}, {x: 3}, {x: 4}, {x: 5} ];
for (let elem of arr) {
elem.x = elem.x ** 2;
}
// [ {"x": 1}, {"x": 4}, {"x": 9}, {"x": 16}, {"x": 25} ]
А в случае с примитивами (числом, строкой) надо как-то вложить квадратное значение обратно в массив в нужную ячейку. Этого-то и не хватает в коде.