У меня проблема с вложенными массивами; если я изменю значение одного элемента массива, другой массив также будет изменен. Я не уверен, что это ошибка или что-то ожидаемое в JS.
Если вы запустите этот код, вы получите два консольных журнала с массивами с первым элементом как "Измененное значение". Я ожидаю увидеть "Новое значение" в первом массиве и "Измененное значение" в массиве valuesContainer_2.
function validationProcess() {
let valuesContainer_1 = [];
let valuesContainer_2 = [];
let data = [
["Option 1"],
["Option 2"],
]
for (let i = 0; i < data.length; i++) {
valuesContainer_1.push(data[i]);
valuesContainer_2.push(data[i]);
}
valuesContainer_1[0][0] = "New Value";
console.log(valuesContainer_1);
valuesContainer_2[0][0] = "Changed Value";
console.log(valuesContainer_2);
}
validationProcess();
Спасибо вам за помощь!
Если вы хотите, чтобы они были независимыми массивами, вы можете вводить копии в свои объекты. slice()
- один из способов сделать это. Обратите внимание, однако, что это мелкая копия, если эти массивы содержат другие массивы, они все равно будут просто ссылками на оригинал.
function validationProcess() {
let valuesContainer_1 = [];
let valuesContainer_2 = [];
let data = [
["Option 1"],
["Option 2"],
]
for (let i = 0; i < data.length; i++) {
valuesContainer_1.push(data[i].slice()); //<-- add a copy
valuesContainer_2.push(data[i].slice()); //<-- add a copy
}
valuesContainer_1[0][0] = "New Value";
valuesContainer_2[0][0] = "Changed Value";
console.log(valuesContainer_1);
console.log(valuesContainer_2)
}
validationProcess();
JSON.parse(JSON.stringify(data[i]))
но обычно вы можете сделать это лучше, если вы можете адаптировать решение к вашим данным, а не делать общее решение. На SO должно быть много ответов о глубоких копиях.
data[i]
- это объект , и объекты передаются по ссылке, они не копируются, если вы не скопировали их явно