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

问题描述 投票:0回答:3
// 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循环。以及如何使用索引删除数组中的元素。

javascript arrays sorting
3个回答
1
投票

几个问题:

  • 代码永远不会向

    newArr
    添加任何内容,因此该函数始终返回一个空数组。它应该将删除(拼接)的元素添加到
    newArr
    。这可以通过
    newArr.push(...arr.splice(smallest,1))

    来完成
  • for..in
    循环的迭代次数将比预期少,因为在每次迭代中数组都会变短,从而消除循环的未来迭代。由于想法是从数组中删除 all 项目,因此只需继续循环,直到数组为空
    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]));


0
投票

你也可以试试这个。

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]));

0
投票

您可以尝试按升序和降序对数组进行排序

 function sortGivenArray(arr, order) {
  let temp;
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if ((order === "asc" && arr[i] > arr[j]) || (order === "dsc" && arr[i] < arr[j])) {
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
      }
    }
  }
  return arr;
}

console.log(sortGivenArray([6, 4, 8, 2, 10, 30, 31], "asc"));
console.log(sortGivenArray([6, 4, 8, 2, 10, 30, 31], "dsc"));

© www.soinside.com 2019 - 2024. All rights reserved.