var array = [5,21,15,32,16,18,17];
function arr1() {
var arr1= array;
for(let i = 0; i<arr1.length;i++) {
for(let j = 0; j < arr1.length-i-1; j++) {
if(arr1[j+1] > arr1[j]) {
let temp = arr1[j];
arr1[j] = arr1[j+1];
arr1[j+1] = temp;
}
}
}
return arr1.reverse();
}
function arr2(){
var arr2=array;
for(var i = 0;i<arr2.length;i++){
var n=i;
while(arr2[n] > arr2[n+1] && n>=0){
var tem = arr2[n];
arr2[n] = arr2[n+1];
arr2[n+1] = tem;
n--;
}
}
return arr2.reverse();
}
function arr3(){
var arr3=array
arr3.sort((a,b) => b-a);
return arr3.reverse();
}
console.log(arr1());
console.log(arr2());
console.log(arr3());
console.log(array);/*放在console.log(arr1());前是原本的乱序,放在console.log(arr1());后是升序,放在console.log(arr2());后是降序*/
}
为什么console.log的位置会改变array内部的顺序?javascript
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 原莱_ 2022-02-17 15:18关注
因为函数里的赋值
var arr2=array
是浅拷贝,这样的话函数arr1,arr2,arr3
以及你的打印都是操作的array
这个数组。按顺序进行操作,位置不一样,结果就不一样。如果想让他们互不影响,可以var arr2=[...array]
这样赋值.
可以参考一下深浅拷贝JS之深浅拷贝_阳光、男孩-CSDN博客_js深浅拷贝 1.深拷贝与浅拷贝的区别如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。2.栈堆、基本数据类型、引用数据类型 栈堆:存放数据的地方 基本数据类型:number,string,boolean,null,undefined. 引用数据类型(Object... https://blog.csdn.net/qq_28332601/article/details/82746184
对你有用的话,请点击一下【采纳此答案】,谢谢🌹
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境