试图在JavaScript中不使用sort()对数组进行排序


// sorting an array
const least_num = (arr)=>{
let smallest = arr[0];
let smallest_index = 0;
for(let i=1; i<arr.length;i++){
if (arr[i] < smallest) {
smallest = arr[i];
smallest_index = i;
}
}
return smallest_index
}

const sortArray = (arr)=>{
const newArr = [];
for(let i in arr){
let smallest = least_num(arr);
console.log(smallest,i)
console.log(arr.splice(smallest,1),arr)
}
return newArr;
}
console.log(sortArray([5,4,3,2,1]));

我正在尝试在不使用sort((的情况下对数组进行排序。它停留在数组长度为2的位置。这可能是因为for循环。以及如何使用索引删除数组中的元素。

几个问题:

  • 代码从不向newArr添加任何内容,因此函数总是返回一个空数组。它应该将移除的(拼接的(元素添加到newArr。这可以通过newArr.push(...arr.splice(smallest,1))完成

  • for..in循环的迭代次数将比预期的少,因为在每次迭代中,数组都会变短,从而消除循环的未来迭代。因为这个想法是从数组中删除所有项,所以只需保持循环,直到数组为空,并使用while (arr.length)

有了这两个更正,您的代码就可以工作了:

const least_num = (arr)=>{
let smallest = arr[0];
let smallest_index = 0;
for(let i=1; i<arr.length;i++){
if (arr[i] < smallest) {
smallest = arr[i];
smallest_index = i;
}
}
return smallest_index
}

const sortArray = (arr)=>{
const newArr = [];
while(arr.length) {
let smallest = least_num(arr);
console.log(smallest)
newArr.push(...arr.splice(smallest,1));
console.log(arr)
}
return newArr;
}
console.log(sortArray([5,4,3,2,1]));

您也可以尝试一下

const sortArray = (arr)=>{
let originalArr = [...arr];
var sortArr = [];
while(originalArr.length) {
let val = originalArr[0];
for ( let j = 1; j < originalArr.length; j++ ) {
if(val>originalArr[j]) {
val = originalArr[j];
}
}
sortArr.push(originalArr.splice(originalArr.indexOf(val), 1)[0]);
}
return sortArr;
}
console.log(sortArray([5,4,3,2,1]));

最新更新