排序我的javascript下拉菜单的名称不是关键#
sorting my javascript pull down menu by name not key#
我正试图按字母顺序排序我的下拉菜单(哈希)…我尝试了一个排序方法有人张贴,但所有我得到的是"未定义"为每个下拉菜单名称
下面是哈希表:
var clientProjectsHash = {};
clientProjectsHash['4'] = {};
clientProjectsHash['4']['name'] = 'Alterna Savins & Credit Union';
clientProjectsHash['4']['projects'] = {};
clientProjectsHash['5'] = {};
clientProjectsHash['5']['name'] = 'BDC';
clientProjectsHash['5']['projects'] = {};
clientProjectsHash['3'] = {};
clientProjectsHash['3']['name'] = 'BELL';
clientProjectsHash['3']['projects'] = {};
clientProjectsHash['6'] = {};
clientProjectsHash['6']['name'] = 'BNC';
clientProjectsHash['6']['projects'] = {};
function getSortedKeys(obj) {
var keys = []; for(var key in obj) keys.push(key);
return keys.sort(function(a,b){return obj[a]-obj[b]});
}
function populateClientSelect(selectedClientId) {
//get the client select
var clientSelect = document.getElementById('clientSelect');
clientProjectsHash = getSortedKeys(clientProjectsHash);
//add the clients
for (clientKey in clientProjectsHash) {
clientSelect.options[clientSelect.options.length] = new Option(clientProjectsHash[clientKey].name, clientKey);
if(selectedClientId == undefined || selectedClientId == 0) {
if(clientKey > 0) {
selectedClientId=clientKey;
}
}
if (clientKey == selectedClientId)
clientSelect.options[clientSelect.options.length-1].selected = true;
}
}
我所尝试的一切都不起作用,这让我发疯了!
没有排序功能:下拉菜单抓取最低键#,它将是3,然后在列表中输出'BELL',我实际上希望"Alterna Savins"显示在下拉列表的顶部。
在sort函数中,keys数组应该接收键所指向的对象,而不是键本身。您还可以将键的值存储在每个数组对象中,以便以后引用它。那么sort函数应该比较每个对象的name属性:
function getSortedKeys(obj) {
var keys = [];
for(var key in obj) {
keys.push(obj[key]);
keys[keys.length-1]['key'] = key;
}
return keys.sort(function(a,b){ return a.name > b.name ? 1 : a.name < b.name ? -1 : 0;});
} // returns [{name:'...', projects:'...', key: '...'}, {}, {}]
如果改变clientProjectsHash
的结构,排序将变得更容易。但是,我不确定你是如何使用clientProjectsHash
的。所以,我的建议可能是在非现代浏览器的性能问题。
var clientProjectsHash = [];
clientProjectsHash[0] = {key: 4, name: 'Alterna Savins & Credit Union', projects: {}};
clientProjectsHash[1] = {key: 5, name: 'BDC', projects: {}};
clientProjectsHash[2] = {key: 3, name: 'BELL', projects: {}};
clientProjectsHash[3] = {key: 6, name: 'BNC', projects: {}};
function sorter(a, b) {
if( a.name < b.name ) return -1;
if( a.name > b.name ) return 1;
return 0;
}
clientProjectsHash.sort(sorter);
我假设您保留了key
值作为快速访问的对象键。但是,for循环现在更快了。你可以试试这样的解法&决定走哪条路,而不是走艰难的路。受苦。
相关文章:
- 我的javascript for循环不起作用
- 如何将我的javascript库公开给其他客户端使用
- 可以Resharper在我的javascript函数声明中添加分号
- 为什么我的JavaScript堆栈排序函数不起作用
- 页面在我的javascript执行后重新加载,我不希望它这样做
- MVC正在忽略我的Javascript文件
- 为什么我的javascript程序没有将其转换为整数而不是字符串
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- 我的javascript太慢了
- 由于某种原因,我的JavaScript函数无法工作
- 为什么我的javascript脚本在页面加载时运行,而不是使用onclick
- 我的Javascript代码出错
- 为什么我的javascript和jquery源文件始终不加载
- AJAX:为什么不是't我的javascript与内容一起加载
- 为什么不是't我的javascript向Project Euler返回正确答案's排名第一
- 为什么当我在带有锚点的页面之间移动时,Rails不重新加载我的javascript文件
- Num doenst在我的javascript中工作
- 在我的JavaScript模块中绑定一个点击事件
- 为什么我的JavaScript函数没有返回选中的数组值
- 使用Ajax将我的Javascript变量传递给PHP