题目描述
在学习冒泡排序时 在浏览器打印一下数组结构发现了个奇怪的现象
在元素交换位置前打印和交换后打印数组结构竟不相同
题目来源及自己的思路
相关代码
元素交换位置前打印
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()) 清除了指针不明白为什么会出现这种情况
使用解构赋值调换位置, 会有返回值, 没用分号隔开就将这个返回值赋值给oldArr了
奇怪的bug........