为何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
相关产品推荐
相关产品推荐

