打印数组时遇到的奇怪问题?

题目描述

在学习冒泡排序时 在浏览器打印一下数组结构发现了个奇怪的现象
在元素交换位置前打印和交换后打印数组结构竟不相同

题目来源及自己的思路

相关代码

元素交换位置前打印

        function bubbleSort(array) {
            const len = array.length
            if (len < 2) return array
            for (let i = 0; i < len - 1; i++) {
                for (let j = i + 1; j < len; j++) {
                    if (array[j] < array[i]) {
                        const oldArr = JSON.parse(JSON.stringify(array))
                        console.log(oldArr);

                        // [1, 3, 6, 3, 23, 1, 34]
                        // [1, 1, 6, 3, 23, 3, 34]
                        // [1, 1, 3, 6, 23, 3, 34]
                        // [1, 1, 3, 3, 23, 6, 34]
                        [array[i], array[j]] = [array[j], array[i]]

                        
                    }
                }
            }
            return array
        } 

        var arr = [1, 3, 6, 3, 23, 1, 34];
        bubbleSort(arr)

元素交换位置后打印

        function bubbleSort(array) {
            const len = array.length
            if (len < 2) return array
            for (let i = 0; i < len - 1; i++) {
                for (let j = i + 1; j < len; j++) {
                    if (array[j] < array[i]) {
                        const oldArr = JSON.parse(JSON.stringify(array))
                        [array[i], array[j]] = [array[j], array[i]]

                        console.log(oldArr);
                        // [1, 3]
                        // [3, 6]
                        // [1, 6]
                        // [1, 3]
                        // [1, 23]

                    }
                }
            }
            return array
        }

        var arr = [1, 3, 6, 3, 23, 1, 34];
        bubbleSort(arr)

你期待的结果是什么?实际看到的错误信息又是什么?

我认为两个打印数据应该是一样
JSON.parse(JSON.stringify()) 清除了指针不明白为什么会出现这种情况

阅读 1.3k
2 个回答

使用解构赋值调换位置, 会有返回值, 没用分号隔开就将这个返回值赋值给oldArr了
奇怪的bug........
image.png
image.png

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏