У меня есть массив с массивами в нем, где я хочу отсортировать внешние массивы на основе значений в определенном столбце во внутреннем.
Я держал пари, что звучал более, чем немного сбивающим с толку, таким образом, я пропущу прямо к примеру.
Исходные данные:
var data = [
[
"row_1-col1",
"2-row_1-col2",
"c-row_1-coln"
],
[
"row_2-col1",
"1-row_2-col2",
"b-row_2-coln"
],
[
"row_m-col1",
"3-row_m-col2",
"a-row_m-coln"
]
];
Данные вида, на основе столбца с индексом 1
data.sortFuncOfSomeKind(1);
где объект затем был бы похож на это;
var data = [
[
"row_2-col1",
"1-row_2-col2",
"b-row_2-coln"
],
[
"row_1-col1",
"2-row_1-col2",
"c-row_1-coln"
],
[
"row_m-col1",
"3-row_m-col2",
"a-row_m-coln"
]
];
Данные вида, на основе столбца с индексом 2
data.sortFuncOfSomeKind(2);
где объект затем был бы похож на это;
var data = [
[
"row_m-col1",
"3-row_m-col2",
"a-row_m-coln"
],
[
"row_2-col1",
"1-row_2-col2",
"b-row_2-coln"
],
[
"row_1-col1",
"2-row_1-col2",
"c-row_1-coln"
]
];
Большой Q
Существует ли существующее решение этого, что Вы знаете о, или я должен был бы записать тот сам? Если так, который был бы самым легким алгоритмом сортировки для использования? QuickSort?
_L
Array # sort
(см. Раздел 15.4.4.11 спецификации или MDC ) принимает необязательный параметр функции, который будет использоваться для сравнения двух записей в целях сортировки. Функция должна вернуть -1, если первый аргумент «меньше» второго, 0, если они равны, или 1, если первый «больше» второго. Итак:
outerArray.sort(function(a, b) {
var valueA, valueB;
valueA = a[1]; // Where 1 is your index, from your example
valueB = b[1];
if (valueA < valueB) {
return -1;
}
else if (valueA > valueB) {
return 1;
}
return 0;
});
(Очевидно, вы можете немного сжать этот код; я оставил его подробным для ясности.)
Здесь раньше была реализация сортировки, которая возвращала результат простого сравнения x
Вот решение, не требующее отдельной переменной для хедержания индекса
var arr = [.....]
arr.sort((function(index){
return function(a, b){
return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1));
};
})(2)); // 2 is the index
Эта сортировка по индексу 2