我想对每个对象的键进行排序: test1,test4,test3 => test1,test3,test4 ...
我的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
})
答案 0 :(得分:0)
您正在渲染整个对象而不是值。试试这个:
{{#each tests}}
<h1>{{@key}}</h1>
<ul>{{#eachSorted this}}<li>{{this.value}}</li>{{/eachSorted}}</ul>
{{/each}}
答案 1 :(得分:0)
将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.log(eachSorted(tests.chapter1));
此外,在您的JSON tests
中是一个对象。您确定可以将each
应用于对象吗?也许您应该使用一个数组。您可以更改JSON,也可以创建一个registerHelper,以根据这些值创建一个数组。使用:Object.values(tests)
。
希望对您有所帮助。