如何对数组的JavaScript进行冒泡排序

时间:2019-06-08 23:29:14

标签: javascript arrays sorting

我想按每个内部数组的第二个数字对数组进行排序。

原始数组: [[1,7],[2,5],[3,4],[4,10]]

排序后所需的数组: [[3,4],[2,5],[1,7],[4,10]]

通过错误“无法读取未定义的属性'1'”对数组进行一次排序后。

我知道这是因为arr [i + 1] [1]是未定义的,因为arr [i] [1]是循环末尾数组中的最后一个元素,因此arr [i + 1] [1]不存在。

我尝试了所有可以想到的条件语句来捕获arr [i + 1] [1](当它变得未定义但没有成功时)。

我应该如何阻止它捕获未定义的错误,而是继续遍历数组直到其完全排序?

let unsortedArr = [[1, 7], [2, 5], [3, 4], [4, 10]]
let sorted = false;

function sort(arr){
  while (!sorted) {
    sorted = true;
    for (let i = 0; i < arr.length; i++) {
         if (arr[i][1] > arr[i + 1][1]) {
          sorted = false;
          let temp = arr[i];
          arr[i] = arr[i + 1];
          arr[i + 1] = temp;
        }
      }
    }
    console.log(arr)
  }

  sort(unsortedArr)

1 个答案:

答案 0 :(得分:0)

问题出在你的

if (arr[i][1] > arr[i + 1][1]) {
//                    ^^^

,它将在i到达length - 1时抛出。最多只迭代length - 2

let unsortedArr = [
  [1, 7],
  [2, 5],
  [3, 4],
  [4, 10]
]
let sorted = false;

function sort(arr) {
  while (!sorted) {
    sorted = true;
    for (let i = 0; i < arr.length - 1; i++) {
      if (arr[i][1] > arr[i + 1][1]) {
        sorted = false;
        let temp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = temp;
      }
    }
  }
  console.log(arr)
}

sort(unsortedArr)