为了账号安全,请及时绑定邮箱和手机立即绑定

js数组push()错误

js数组push()错误

拉莫斯之舞 2018-12-19 22:19:29
小白想尝试一下使用JS实现一下基本的排序算法在尝试过程中觉得一下子出结果不便于理解过程所以就寻思着用一个数组来记录每次移动的结果然后就发现最终打印的用来记录的数组各项相等百思不得其解<script>//使用data数组记录每次交换//BUG:打印出的data数组的项一致,都是排序后的结果数组'use strict';const arr = [1,23,4,54,655,65,7,67,6,9,3,2,3,23,232,3];let data = [];function BubbleSort(arr) {    for (let i = 0; i <= arr.length - 1; i++) {        for (let j = 0; j <= arr.length - i - 1; j++) {            if (arr[j] > arr[j + 1]) {                swap(arr, j, j + 1);                data.push(arr);                            }        }    }    }function swap(arr, i, j) {    let temp = arr[i];    arr[i] = arr[j];    arr[j] = temp;}BubbleSort(arr);console.log(data);</script>
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

data.push(arr)改为data.push(arr.slice(0))试试。。。。

var arr = [1,23,4,54,/*....*/]; 意思是,分配一段内存,里面存储1,23, 4, 54 ... 然后,arr只是存储了这段内存的标识。

arr[1] = 1; 意思是把arr标识那个内存的第2个位置,修改为1,也就是说标识arr并没有改变,只是依旧是指向这段内存。

data.push(arr) 都是保存的这个标识,所以都是指向同一段内存。


查看完整回答
反对 回复 2019-01-28
  • 1 回答
  • 0 关注
  • 731 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号