Самый простой и простой способ сортировки массива чисел в предопределенном порядке [дублировать]

3
задан aaronrussell 4 February 2014 в 13:12
поделиться

2 ответа

Попробуйте следующее:

objects.sort(function(a, b){
    return order.indexOf(a.id) - order.indexOf(b.id)
});

Предполагая, что переменные похожи на то, как вы их объявили в вопросе, это должно возвратиться:

[
    { id: 'bbbb', description: 'bar' },
    { id: 'aaaa', description: 'foo' },
    { id: 'cccc', description: 'baz' }
];

(Фактически это изменяет objects переменная) [/ д2]

12
ответ дан Andy 19 August 2018 в 10:59
поделиться

Вам нужен способ перевести строку в позицию в массиве, т. е. индекс-функции для массива.

Существует один в новых браузерах, но для обратной совместимости вам нужно добавить его, если его там нет:

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(str) {
    var i;
    for (i = 0; i < this.length; i++) if (this[i] == str) return i;
    return -1;
  }
}

Теперь вы можете отсортировать массив, повернув строку в индекс:

objects.sort(function(x,y){ return order.indexOf(x.id) - order.indexOf(y.id); });

Демо: http://jsfiddle.net/Guffa/u3CQW/

2
ответ дан Guffa 19 August 2018 в 10:59
поделиться
Другие вопросы по тегам:

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