2012-01-22 3 views
2

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

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)), когда Я вызываю функцию. С приведенными выше данными мне нужно отсортировать, щелкнув один из заголовков моей таблицы, который будет включать сортировку строки и числовых значений. Любые идеи относительно сортировки вложенных значений в массиве «баллов»? Как я могу сортировать по первому/фамилии?

+0

См. Https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort. «a» и «b» относятся к элементам некоторой сортируемой пары. Алгоритм сортировки использует это правило для каждого элемента в вашем массиве. –

ответ

0

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

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

Удалите .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 будет использовать числовой порядок сортировки по умолчанию.

+0

Ваш awesome, но где функция получает элементы, чтобы определить их порядок сортировки, если я не передаю элементы в качестве параметров? Или я? – jjhenry

+0

Вы вызываете метод 'sort' явно в своем массиве' students.sort (...) 'и передаете ему свою функцию сортировки. Затем метод 'sort' массива принимает вашу функцию и при необходимости применяет ее к своим элементам. –

+0

Большое спасибо. То, что я делаю, - это создание динамического TABLE, и мне нужна возможность сортировки через заголовки таблицы. Мне сложно сортировать данные во вложенном массиве. Я хочу сортировать массив по вложенному первому значению, вложенному второму значению и т. Д. ... любые идеи? оценки: [99,190,188,185,160,88,89,76] 99 будет первой колонкой, 190 будет второй колонкой и так далее ... – jjhenry

0

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

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

Смежные вопросы