Как выполнить пузырьковую сортировку массива JavaScript - PullRequest
0 голосов
/ 09 июня 2019

Я хочу отсортировать массив массивов по второму номеру каждого внутреннего массива.

Исходный массив: [[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 голосов
/ 09 июня 2019

проблема ваша

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...