You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript中数组赋值后org变量随原数组排序改变?

问题原因与解决方法

为什么赋值后org跟着被修改?

JavaScript里数组是引用类型,不是值类型。当你写let org=prices时,并没有复制一份新数组,只是让org和prices指向了内存中同一个数组对象。sort()方法是原地排序——直接修改调用它的数组本身,所以prices.sort()执行后,内存里的原数组被改变了,org作为同一个数组的引用,打印出来自然是排序后的结果。

修正代码:复制原数组而非引用

要保留原数组,必须创建一个原数组的拷贝,常用的几种方式:

const maxProfit = function(prices) {
    // 方式1:扩展运算符(ES6+)
    let org = [...prices];
    // 方式2:slice方法(无参数时返回浅拷贝)
    // let org = prices.slice();
    // 方式3:Array.from
    // let org = Array.from(prices);

    prices.sort((a,b)=> a - b);
    console.log(org); // 输出原数组 [7,1,5,3,6,4]
    let ind = org.indexOf(prices[0]);
    console.log(ind); // 输出1,符合预期
};

console.log(maxProfit([7,1,5,3,6,4]))

补充说明

这些方法都是浅拷贝,如果数组里嵌套了对象或其他引用类型,需要用深拷贝(比如JSON.parse(JSON.stringify(prices))),但对于纯数字数组,浅拷贝完全够用。

内容的提问来源于stack exchange,提问作者bugsmasher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:37:11