arrays - JS数组变异
问题描述
为什么第一个函数会改变 originalArr(尽管我创建了 copyArr 以仅在该副本上执行方法)?为什么第二个函数不改变 originalArr?
function removeSmallest(originalArr) {
const copyArr = originalArr;
console.log(originalArr);
copyArr.splice(copyArr.indexOf(Math.min(...copyArr)), 1);
console.log(originalArr); //here originalArr is mutated, why?//
return copyArr;
}
function removeSmallest(originalArr) {
const copyArr = [];
copyArr.push(...originalArr);
console.log(originalArr);
copyArr.splice(copyArr.indexOf(Math.min(...copyArr)), 1);
console.log(originalArr); //originalArr not mutated, why?//
return copyArr;
}
解决方案
JavaScript 数组通过引用工作,这意味着在第一个函数中,两者都copyArr
指向originalArr
同一个对象。要复制数组并避免这种情况,您可以使用您在第二个函数中使用的方法,或者简单地使用const copyArr = originalArr.slice()
.
推荐阅读
- azure - 通过 ARM 模板使用参数(数组类型)为多个对象 ID 设置密钥保管库访问策略
- python - ModuleNotFoundError:没有模块名称“pygame”
- podofo - WkHTMLtoPDF 绘制文本 面朝下
- php - 如何将数组的数字索引转换为关联数组
- python - 确定时间差
- javascript - 自动完成在 Gridview HeaderTemplate 中不起作用
- c# - 为什么我的解决方案认为这个项目的版本是0.0.0.0,如何解决?
- javascript - 如何在 .html() 中显示变量值以及文本
- python-3.x - Python Concatenante Integer 和 String 然后将变量设为整数格式
- php - 如果视频不存在,则仅从数据库中输出无效的 YouTube ID