Для вашего формата подойдет const sorted = [...rows].sort((a, b) => a[1] - b[1]);. Здесь сначала создается новый внешний массив, а затем его элементы переставляются по второму значению каждой строки. Индекс 1 соответствует второму элементу, поскольку отсчет начинается с нуля.
Без функции сравнения sort использует строковое сравнение представлений элементов. Поэтому он не знает, что именно второе поле должно быть числовым критерием. Функция сравнения должна возвращать отрицательное число, ноль или положительное число в соответствии с выбранным порядком. Возвращать только логическое значение из выражения вроде a[1] > b[1] — неподходящий способ задать корректный общий порядок.
Для убывания используйте обратную разность. Если первым критерием может быть одинаковое число, заранее решите, нужен ли дополнительный критерий, например название. Это правило следует выразить явно, когда оно важно для результата.
Копирование через spread сохраняет порядок исходного внешнего массива, но не создает глубокие копии строк. Если после сортировки изменить внутреннее значение, общий вложенный массив останется тем же объектом. Для простой перестановки строк глубокое копирование обычно не нужно.
Проверьте наличие второго элемента и его тип. Значение undefined или неподходящая строка могут сделать результат сравнения NaN и нарушить ожидаемое поведение сортировки. Лучше выявить ошибочные данные заранее.
В современных средах есть toSorted, создающий новый массив без изменения исходного. Но независимо от выбранного метода правила сравнения и общие ссылки на вложенные элементы остаются вопросами, которые нужно понимать отдельно.
Ответить на вопрос