Как работает настраиваемая функция сортировки для многомерных массивов - PullRequest
2 голосов
/ 22 января 2012

Я прочесал паутину, чтобы попытаться дать себе некоторое представление о том, что означает следующее в отношении объекта ниже.Что означают «а» и «б»?Почему это важно?

students.sort(function(a, b){
    return a.fn-b.ln
})

var students = [{
    fn : "Stone",
    ln : "Carpenter",
    scores : [61,99,73,68,80,62,176,78]
},
{
    fn : "Samson",
    ln : "Sears",
    scores : [68,193,91,190,95,65,171,75]
},
{
    fn : "Quin",
    ln : "Morton",
    scores : [79,95,161,92,182,163,198,182]
},
{
    fn : "Qunitessa",
    ln : "Hardy",
    scores : [99,65,75,69,77,67,86,78]
},
{
    fn : "Ashley",
    ln : "England",
    scores : [147,70,81,64,148,71,70,63]
},
{
    fn : "Thaddeus",
    ln : "Hutchinson",
    scores : [99,190,188,185,160,88,89,76]
},
{
    fn : "Yeo",
    ln : "Hayes",
    scores : [88,64,199,165,198,76,74,81]
},
{
    fn : "Rylee",
    ln : "Larson",
    scores : [71,126,63,71,168,173,175,88]
}
];

Я понимаю, что анонимная функция будет возвращать значение -1,0,1, но какова значимость аргументов a и b, поскольку я будуне передавать какие-либо значения (например, employees.sort(a.something, b.something)), когда я вызываю функцию.С вышеупомянутыми данными мне нужно отсортировать, нажав на один из заголовков моей таблицы - что будет включать сортировку строк и числовых значений.Любые идеи о том, как отсортировать вложенные значения в массиве "Score"?Как бы я занялся сортировкой по имени / фамилии?

Ответы [ 2 ]

0 голосов
/ 23 января 2012

.sort принимает обратный вызов. Затем он выберет два элемента из массива и передаст их функции обратного вызова. Функция обратного вызова возвращает какой элемент больше. .sort переупорядочивает два элемента в массиве на основе этой информации. Затем он берет два других элемента и передает их в обратный вызов. Промыть, повторять до сортировки массива.

a и b - это просто переменные для «элемента» и «другого элемента». Называй их как хочешь. Там нет никакого значения для именования.

0 голосов
/ 22 января 2012

Метод sort массива будет использовать вашу функцию сортировки и применять ее при необходимости для сравнения двух элементов и определения порядка их сортировки.a и b будут двумя элементами массива, который вы сортируете.

Чтобы отсортировать объекты в алфавитном порядке по фамилии, вам понадобится функция сортировки, подобная этой:

function lastNameCompare(a, b) {
    var sortFieldA = a.ln.toLowerCase();
    var sortFieldB = b.ln.toLowerCase();
    return sortFieldA == sortFieldB ? 0 : (sortFieldA < sortFieldB ? -1 : 1);
}

Удалите .toLowerCase(), если вы хотите, чтобы в вашем сортировке учитывался регистр.Чтобы отсортировать что-то вроде « фамилия, имя », вместо этого вы должны использовать следующие строки:

    var sortFieldA = (a.ln + ", " + a.fn).toLowerCase();
    var sortFieldB = (b.ln + ", " + b.fn).toLowerCase();

Чтобы также отсортировать оценки в ваших данных, вам необходимо выполнить сортировкуна каждую запись вашего набора данных:

for (var i = 0; i < students.length; i++) {
    var student = students[i];
    student.scores.sort();
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...