Я пытаюсь скопировать массив в новую переменную, а затем изменить массив.
Код:
var test = [
{ test: "test1", arr: ["1", "2", "3"] },
{ test: "test2", arr: ["4", "5", "6"] }
];
console.info("test before", test);
console.info("test before", test[1]);
console.info("test before", test[1].arr);
var t2 = [...test] // used .slice(0) but same result
t2[1].arr = t2[1].arr.slice(0, 1);
console.info("test after", test[1].arr);
console.info("t2", t2[1].arr);вывод:
test before:
0: {test: "test1", arr: Array(3)} //arr: (3) ["1", "2", "3"]
1: {test: "test2", arr: Array(1)} // arr: (1) ["4"]
test before:
{test: "test2", arr: Array(3)} //arr: (1) "4"
test before: (3) ["4", "5", "6"]
test after: ["4"]
t2: ["4"]
Как видите, оператор спреда/ slice() изменяет исходное значение.
Я также пытался использовать var t2 = Object.Create(test) [тот же результат].



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


Когда вы назначаете объект/массив переменной, он не копирует его. Я просто устанавливаю ссылку на исходный объект/массив. Вы должны использовать Object.assign для поверхностного клонирования и JSON.parse(JSON.stringify(obj)) для глубокого клонирования
Примечание: массивы на самом деле являются объектами в javascript
var test = [
{ test: "test1", arr: ["1", "2", "3"] },
{ test: "test2", arr: ["4", "5", "6"] }
];
console.info("test before", test);
console.info("test before", test[1]);
console.info("test before", test[1].arr);
var t2 = JSON.parse(JSON.stringify(test)) // used .slice(0) but same result
t2[1].arr = t2[1].arr.slice(0, 1);
console.info("test after", test[1].arr);
console.info("t2", t2[1].arr);JSON.parse(JOSN.stringify(obj)) is not much efficient and will give wrong output in some cases.
$.extend(true, {}, obj);
_.cloneDeep(value)
здесь Подробнее об этом можно узнать
Распространение массива (или Array.slice()) является лишь мелкой копией исходного массива, поэтому подобъект остается прежним.
Подробнее о глубоком копировании объектов см. здесь: Как вы клонируете массив объектов в Javascript?.
@undefined Да, я хочу изменить t2[1].arr. Сначала у него было 3 элемента, но я хочу, чтобы в нем был только первый элемент, поэтому я делаю slice().