请教个 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 更合适
大意了 我自己发的帖子 我自己也不能删