Javascript 赋值变量意外地跟随数组的更改

Javascript 赋值变量意外地跟随数组的更改,javascript,Javascript,我将新变量分配给数组。修改数组后,分配的变量意外地跟随数组的更改 let reference=我被派往地球是为了保护你。 让orders=reference.split*.maps=>s.toLowerCase.replace/\,|\?|\!|\:|\/g、 .修剪; 让答案=命令; console.logorders 控制台.日志应答 //改变命令,不要回答! 订单。推送订单。移位; //订单会按预期发生变化,但在订单发生变化之前未发生变化的答案会随之发生变化 console.logord

我将新变量分配给数组。修改数组后,分配的变量意外地跟随数组的更改

let reference=我被派往地球是为了保护你。 让orders=reference.split*.maps=>s.toLowerCase.replace/\,|\?|\!|\:|\/g、 .修剪; 让答案=命令; console.logorders 控制台.日志应答 //改变命令,不要回答! 订单。推送订单。移位; //订单会按预期发生变化,但在订单发生变化之前未发生变化的答案会随之发生变化 console.logorders 控制台.日志应答 您正在复制要应答的订单引用,因为它是一个数组

这就像给同一个内存块取了另一个名字

This should solve your problem
改变让答案=命令;让答案=[…命令]

let reference=我被派往地球是为了保护你。 让orders=reference.split*.maps=>s.toLowerCase.replace/\,|\?|\!|\:|\/g、 .修剪; 让答案=[…命令]; console.logorders 控制台.日志应答 //改变命令,不要回答! 订单。推送订单。移位; //订单会按预期发生变化,但在订单发生变化之前未发生变化的答案会随之发生变化 console.logorders 控制台.日志应答 您正在复制要应答的订单引用,因为它是一个数组

这就像给同一个内存块取了另一个名字

This should solve your problem
改变让答案=命令;让答案=[…命令]

let reference=我被派往地球是为了保护你。 让orders=reference.split*.maps=>s.toLowerCase.replace/\,|\?|\!|\:|\/g、 .修剪; 让答案=[…命令]; console.logorders 控制台.日志应答 //改变命令,不要回答! 订单。推送订单。移位; //订单会按预期发生变化,但在订单发生变化之前未发生变化的答案会随之发生变化 console.logorders
console.loganswer您正在变异现有数组。通过执行以下操作克隆它:

let reference=我被派往地球是为了保护你。 让orders=reference.split*.maps=>s.toLowerCase.replace/\,|\?|\!|\:|\/g、 .修剪; 让答案=[…命令]; console.logorders 控制台.日志应答 //改变命令,不要回答! 订单。推送订单。移位; //订单会按预期发生变化,但在订单发生变化之前未发生变化的答案会随之发生变化 console.logorders
console.loganswer您正在变异现有数组。通过执行以下操作克隆它:

let reference=我被派往地球是为了保护你。 让orders=reference.split*.maps=>s.toLowerCase.replace/\,|\?|\!|\:|\/g、 .修剪; 让答案=[…命令]; console.logorders 控制台.日志应答 //改变命令,不要回答! 订单。推送订单。移位; //订单会按预期发生变化,但在订单发生变化之前未发生变化的答案会随之发生变化 console.logorders
console.loganswer这将解决您的问题

let answer = [...orders];

这会解决你的问题

let answer = [...orders];
let answer=orders.0将创建数组对象的浅层副本。 我认为,要复制阵列对象,解决方案是:

let answer = copy(orders);

// copy function
function copy(object) {
    var output, value, key;
    output = Array.isArray(object) ? [] : {};
    for (key in object) {
        value = object[key];
        output[key] = (typeof value === "object") ? copy(value) : value;
    }
    return output;
}
let answer=orders.0将创建数组对象的浅层副本。 我认为,要复制阵列对象,解决方案是:

let answer = copy(orders);

// copy function
function copy(object) {
    var output, value, key;
    output = Array.isArray(object) ? [] : {};
    for (key in object) {
        value = object[key];
        output[key] = (typeof value === "object") ? copy(value) : value;
    }
    return output;
}

如果我把一个变量赋给另一个变量,它们都不是数组;与let var1=var2类似,只有值被复制。保存数组的变量实际上保存对内存位置的引用如果要执行var a=arr[0]仍然只有值被复制如果我将一个变量分配给另一个变量,它们都不是数组;与let var1=var2类似,只复制值。保存数组的变量实际上包含对内存位置的引用。如果要执行var a=arr[0],仍然只复制值