вид внешний массив на основе значений во внутреннем массиве, JavaScript

У меня есть массив с массивами в нем, где я хочу отсортировать внешние массивы на основе значений в определенном столбце во внутреннем.

Я держал пари, что звучал более, чем немного сбивающим с толку, таким образом, я пропущу прямо к примеру.

Исходные данные:

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

7
задан ptrn 8 May 2010 в 11:19
поделиться

3 ответа

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;
});

(Очевидно, вы можете немного сжать этот код; я оставил его подробным для ясности.)

9
ответ дан 6 December 2019 в 15:19
поделиться

Здесь раньше была реализация сортировки, которая возвращала результат простого сравнения x. Это решение не поддерживается, и этот пост оставлен только для того, чтобы сохранить последующую дискуссию.

1
ответ дан 6 December 2019 в 15:19
поделиться

Вот решение, не требующее отдельной переменной для хедержания индекса

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

4
ответ дан 6 December 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: