Я хотел бы отсортировать ключи объектов с каждым: тест1, тест4, тест3 => тест1, тест3, тест4 ...
Мой json:
"tests": {
"chapter1": {
"test1": 5,
"test4": 8,
"test3": 3
},
"chapter2": {
"test1": 1,
"test5": 14,
"test3": 12
}
}
Код моего руля:
{{#each tests}}
<h1>{{@key}}</h1>
<ul>{{#eachSorted this}}<li>{{this}}</li>{{/eachSorted}}</ul>
{{/each}}
Я пробовал, но не работает:
Handlebars.registerHelper('eachSorted', function(context, options) {
var ret = ""
Object.keys(context).sort().forEach(function(key) {
ret = ret + options.fn({key: key, value: context[key]})
})
return ret
})
Это 5,3,8 и 1,12,14 с моим кодом руля в списке html.
Обратите внимание, что в заголовке указано «Сортировка массива...», но вместо этого вы хотите отсортировать ключи объекта по их значениям.
@NicoDiz Ты прав. Я отредактировал свой пост.
Здорово! Мой ответ сработал?
Я отметил первый ответ, потому что это было именно то, что я искал. Но спасибо за вашу помощь.
вы визуализируете весь объект вместо значения. Попробуй это:
{{#each tests}}
<h1>{{@key}}</h1>
<ul>{{#eachSorted this}}<li>{{this.value}}</li>{{/eachSorted}}</ul>
{{/each}}
Спасибо за вашу помощь, но это не сортирует мои объекты по значению ключа.
Так и будет. вспомогательный метод, который вы написали, будет работать. вам просто нужно изменить способ доступа к отсортированным значениям.
Омг, ты прав. извините! Когда я хочу создать вторую таблицу с такой же сортировкой, но с ключом, я не получаю вывод с ключом.значение
если вы хотите отобразить ключ, используйте `{{this.key}}'
Замените функцию eachSorted
на это:
var tests = {
"chapter1": {
"test1": 5,
"test4": 8,
"test3": 3
},
"chapter2": {
"test1": 1,
"test5": 14,
"test3": 12
}
};
function eachSorted(context) {
var ret = {};
Object.keys(context)
.sort()
.forEach(function(key) {
ret[key] = context[key];
});
return ret;
}
console.info(eachSorted(tests.chapter1));
Кроме того, в вашем JSON tests
есть объект. Вы уверены, что можете применить each
к объекту? Возможно, вам следует использовать массив. Вы можете изменить JSON или создать registerHelper, который создает массив из значений. Использование: Object.values(tests)
.
Надеюсь, поможет.
Каков ожидаемый результат?