Нужна помощь в сортировке вложенного массива смешанной строки и целого числа в определенном индексе - PullRequest
1 голос
/ 07 ноября 2019

Я там,

У меня есть вложенный массив с оценками, который я пытаюсь отсортировать, однако все значения являются строковыми, и сортировка происходит неправильно, как и ожидалось.

Этотакже все сохранено в localstorage.

У меня есть код ниже для сортировки, которая отлично работает, но только для первого символа, поэтому для сортировки индекса [3], например, я получаю:

0000, 126, 15, 16, 20, 4, 4, 4, 5, 8 // Как видно из приведенного ниже массива.

Но ядолжен получить:

0000, 4, 4, 4, 5, 8, 15, 16, 20, 126

Я прочитал, что яМожно добавить нули до сортировки, а затем удалить их после сортировки. Но я не могу найти способ добавить нули в такой сложный массив данных ...

Массив выглядит так:

0: (5) ["Jack 9", "words", "6", "0000", "00:08:21"]
1: (5) ["Jack 6", "words", "59", "126", "00:08:22"]
2: (5) ["Jack 1", "words", "30", "15", "00:03:81"]
3: (5) ["Jack 4", "words", "24", "16", "00:02:94"]
4: (5) ["Jack 2", "words", "9",  "20", "00:14:90"]
5: (5) ["Jack 11","words", "9",   "4", "00:18:04"]
6: (5) ["Jack 10","words", "9",   "4", "00:19:06"]
7: (5) ["Jack 5", "words", "6",   "4", "00:08:97"]
8: (5) ["Jack 8", "words", "9",   "5", "00:16:83"]
9: (5) ["Jack 7", "words", "8",   "8", "00:19:98"]

function sortScoresErrors(array){
    array.sort((function(index){
        return function(a, b){
            return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
        };
        })(3));// (3) is the index - Descending
    };

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Просто преобразуйте строку в Число в условии, и все готово.

Замените return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));

на это:return (Number(a[index]) === Number(b[index]) ? 0 : (Number(a[index]) < Number(b[index]) ? -1 : 1));

Это работает, когда строки в третьем индексе на самом деле являются числовыми

0 голосов
/ 07 ноября 2019

Вы можете проверить, можно ли считать значение требуемого индекса числовым значением, и взять другую функцию с дельтой элемента для сравнения.

function sortScoresErrors(array) {
    array.sort((function (index) {
        return isFinite(array[0][index])
            ? (a, b) => a[index] - b[index]
            : (a, b) => (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
    })(3));
}

var data = [["Jack 9", "words", "6", "0000", "00:08:21"], ["Jack 6", "words", "59", "126", "00:08:22"], ["Jack 1", "words", "30", "15", "00:03:81"], ["Jack 4", "words", "24", "16", "00:02:94"], ["Jack 2", "words", "9", "20", "00:14:90"], ["Jack 11", "words", "9", "4", "00:18:04"], ["Jack 10", "words", "9", "4", "00:19:06"], ["Jack 5", "words", "6", "4", "00:08:97"], ["Jack 8", "words", "9", "5", "00:16:83"], ["Jack 7", "words", "8", "8", "00:19:98"]];

sortScoresErrors(data);

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...