我正在使用jQuery来解析员工的JSON文件,其中包含他们的姓名,部门,子部门和其他一些细节。
e.g:
[
{
"LAST":"Betsy",
"FIRST":"Jackson",
"DEPT":"Customer Service",
"SUBDEPT":"Tech Support",
"JOINED":"02/94",
"TITLE":"Technical Customer Service Representative",
"RESIDENCE":"Someplace",
"HOBBIES":"Reading, Walking, Sleeping"
},
{
"LAST":"Sally",
"FIRST":"Smith",
"DEPT":"Customer Service",
"SUBDEPT":"Installation Customer Service Representative",
"JOINED":"01/04",
"TITLE":"Technical Customer Service Representative",
"RESIDENCE":"Someplace",
"HOBBIES":"Reading, Walking, Sleeping"
},
]
我正在尝试构建一个应用程序,用户可以在该应用程序中单击员工的姓名并查看结果的刷新,其中显示该员工部门中的每个员工,由子部门组织,并向下滚动到给予员工。
我已经成功生成了一个员工姓名列表,其中包含data- *属性来保存他们的部门和子部门。单击员工姓名时,我能够再次解析JSON文件,同时返回该部门中的所有员工,并构建网格,然后将整个匹配的员工对象推送到名为“结果。“
注意:dept =由jquery选择器传递的data-dept ..
$.each(data, function(i, employee) {
if (employee.DEPT == dept) {
var employeetext = '<span class="name">'
+ employee.FIRST+' '+ employee.LAST+'</span>',
employee.JOINED,
employee.TITLE,
employee.RESIDENCE,
'...',
employee.HOBBIES;
$('#employees').append('<div class="employee_block"><img src="" width="85" height="113">' + employeetext + '.</div>');
results.push(employee);
}
}) // end stepping through employees
但是,我需要根据数组中新的排序顺序构建网格,而不是现在使用的字母顺序。我需要按子部门划分结果,根据不按字母顺序排列的优先级,而是我希望在单独的对象中定义的自定义顺序(这将是“关系数据库吗?”),例如:< / p>
var subdeptorder = [
{
"DEPT": "Marketing",
"SUBDEPTS": ["Administration", "Purchasing", "Advertising", "PR"]
},
{
"DEPT": "Sales",
"SUBDEPTS": ["Administration", "Business Development"]
}
]
所以我需要根据员工的部门(以及该部门的子部门订单)对“结果”数组进行排序。
如何根据在单独对象中建立的优先级编写比较函数来重新排序“results”数组?
答案 0 :(得分:2)
将单独的对象格式化为:
var subdeptorder = {
"Marketing": ["Administration", "Purchasing", "Advertising", "PR"],
"Sales": ["Administration", "Business Development"]
};
然后你可以这样对数据进行排序:
var dept = …; // the chosen one
var results = $.grep(data, function(employee) {
return employee.DEPT = dept;
}),
order = subdeptorder[dept];
results.sort(function(a, b) {
// sort them by the indices of their SUBDEPTs in the order array
return $.inArray(a.SUBDEPT, order) - $.inArray(b.SUBDEPT, order);
});
$.each(results, function(i, employee) {
$('#employees').append('<div class="employee_block"><img src="" width="85" height="113">' + [
'<span class="name">'+employee.FIRST+' '+employee.LAST+'</span>',
employee.JOINED,
employee.TITLE,
employee.RESIDENCE,
'…',
employee.HOBBIES
].join(' ') + '.</div>');
});
有关优化版本的信息,请参阅Sorting on a custom order(每次都不使用$.inArray
索引。)