У меня проблема с моей функцией JS. Для упрощения я хочу заполнить массив (arr1) n другими массивами (arr2). В моем цикле я использую счетчик для текущей позиции в arr1 (не могу использовать arr1.push по какой-то причине). Если я регистрирую все мои arr2 в arr1, они все одинаковы, всегда последний из добавленных. Поэтому я написал базовый сценарий для его проверки. Я всегда регистрирую первый элемент и цементирую счетчик. Я новичок в JS, есть ли какое-то недопонимание, которого я не понимаю?
function test(){
var arr1 = [];
var arr2 = [];
var counter=1;
arr2[0] = "first";
arr2[1] = "first";
arr2[2] = "first";
arr1[0]=arr2;
arr1[0].forEach(function(elem){console.info(elem);});
for (var i = 0; i < 10 ; i++) {
arr2[0]=counter;
arr2[1]=counter;
arr2[2]=counter;
arr1[counter]=arr2;
arr1[0].forEach(function(elem){console.info(elem);});
counter++;
}
}<button onclick = "test()">Click</button>... потому что arr1[0] = arr2; не копирует arr2.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как сказал Пойнти, он просто ссылается на arr2 и не создает копию.
Значит тебе нужно
arr2=new Array();
в начале цикла.
Вы можете попробовать воспользоваться оператором спреда.
arr1[0]=[...arr2];
arr1[counter]=[...arr2];
Массив - это ссылочный тип, поэтому вы всегда ссылаетесь на базу, вы не помещаете ее копию внутри arr1, а ссылаетесь на arr2.
Вы хотите, чтобы копия arr2 была назначена на arr1.
Вы можете сделать это, создав новый массив или более современный оператор ... spread
Каждый раз при прохождении цикла необходимо создавать новый
arr2.