技术解析

请教个 JavaScript 问题
0
2021-08-09 21:30:12
idczone
function bubbleSort(arr, b) {
let newArr = arr.map(v => v),max = newArr.length - 1;
for (let j = 0; j < max; j++) {
for (let i = 0; i < max - j; i++) {
if (newArr[i].id > newArr[i + 1].id) {
let temp = newArr[i].id;
newArr[i].id = newArr[i + 1].id;
newArr[i + 1].id = temp;
}
}
}
return newArr;
}

let arr = [{ id: 4 }, { id: 2 }, { id: 3 }, { id: 9 }];

console.log(arr); // [{id: 2},{id: 3},{id: 4},{id: 9}]
console.log(bubbleSort(arr)); // [{id: 2},{id: 3},{id: 4},{id: 9}]
console.log(arr); // [{id: 2},{id: 3},{id: 4},{id: 9}]

排序 为什么原始的 arr 也被修改了
因为你修改的是对象的 id,而不是交换新数组里元素的位置。新数组里的对象引用的还是原来的。另外当前场景下 Array.prototype.slice 比 map 更合适

大意了 我自己发的帖子 我自己也不能删
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服