js数组push()错误

小白想尝试一下使用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>


拉莫斯之舞
浏览 732回答 1
1回答

一只斗牛犬

data.push(arr)改为data.push(arr.slice(0))试试。。。。var arr = [1,23,4,54,/*....*/];&nbsp;意思是,分配一段内存,里面存储1,23, 4, 54 ...&nbsp;然后,arr只是存储了这段内存的标识。arr[1] = 1;&nbsp;意思是把arr标识那个内存的第2个位置,修改为1,也就是说标识arr并没有改变,只是依旧是指向这段内存。data.push(arr)&nbsp;都是保存的这个标识,所以都是指向同一段内存。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript