сортировать рубиновый хэш при использовании json - PullRequest
2 голосов
/ 25 марта 2011

У меня есть хэш Ruby, который я конвертирую to_json и передаю в представление. Затем JavaScript анализирует JSON (JSON.parse) и повторяет его, выпуская ключ и пары значений. Как отсортировать хэш так, чтобы мои пары ключ / значение располагались в алфавитном порядке по ключу? Это можно сделать до перехода к представлению или в JavaScript, если конечный результат представляет собой упорядоченный список ключей / значений. hash.sort не работает и hash.to_a.sort ... Если я это сделаю, я обнаружу, что не могу правильно выполнить итерацию и получить ключ и значение.

for (key in myHash) {alert(key); alert(myHash[key]); } не работает после применения сортировки.

Ответы [ 4 ]

3 голосов
/ 25 марта 2011

Преобразовать хеш в массив и затем отсортировать его:

var arr = [];
for (var key in hash) {
  if (Object.prototype.hasOwnProperty.call(hash, key))
    arr.push([key, hash[key]]);
}
arr.sort(function(h1, h2) {
  return h1[0] > h2[0] ? 1 : h1[0] < h2[0] ? -1 : 0;
});

Теперь вы можете перебирать "arr", и ключи будут в порядке.

Вы также можете сделать его массивом на стороне Ruby, чтобы код JavaScript получал массив JSON в правильном порядке вместо объекта JSON.

2 голосов
/ 25 марта 2011
h = {"b"=>2, "a"=>1}

Hash[*h.sort.flatten].to_json
1 голос
/ 21 мая 2015
def sort_hash(h)
  {}.tap do |h2|
    h.sort.each do |k,v|
      h2[k] = v.is_a?(Hash) ? sort_hash(v) : v
    end
  end
end

From: Как конвертировать хэш в json, сохраняя сортировку в шаблоне ruby ​​

0 голосов
/ 25 марта 2011

Попробуйте это:

 h = {"b"=>2, "a"=>1}
 ActiveSupport::OrderedHash[*h.sort].to_json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...