按字母顺序排序javascript填充的选择列表

时间:2013-05-31 21:21:24

标签: javascript

我正在尝试对我的javascript popuplated选择列表进行排序,并且我搜索了该网站上的所有其他帖子,但我无法让它工作......

这是我的javascript,它自动填充SQL db中数据的选择列表:

for (clientKey in clientProjectsHash) {
            //alert("client:" + clientKey + ", name: " + clientProjectsHash[clientKey].name);
            clientSelect.options[clientSelect.options.length] = new Option(clientProjectsHash[clientKey].name, clientKey);

            if(selectedClientId == undefined || selectedClientId == 0) {
                if(clientKey > 0) {
                    selectedClientId=clientKey;
                }
            }

我试图添加: clientProjectsHash.sort();到顶部但不起作用...感谢任何人的帮助!

这是我从数据库中获取第一个客户端ID的另一个函数:

function getInitialClient() {
    for (clientKey in clientProjectsHash) {
        if(clientKey > 0) {
            return clientKey;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

var list = [];
for(key in clientProjectsHash)
    list.push(key);
list.sort();
for(var i=0; i<list.length; i++)
{
   clientSelect.options[clientSelect.options.length] = new Option(clientProjectsHash[list[i]].name, clientKey);

        if(selectedClientId == undefined || selectedClientId == 0) {
            if(clientKey > 0) {
                selectedClientId=clientKey;
            }
        }
}

答案 1 :(得分:2)

我们走了。

您希望按其值对对象的可枚举键进行排序。

  • 您可以使用Object.keys来获取对象的可枚举属性。

  • 然后,您可以使用Array.map将每个键转换为对象中的值。

(这两个链接在旧版浏览器中都有垫片)

  • 然后你可以调用正常的sort函数。

示例

假设您的对象类似于

var obj = {
    "a":"Hello",
    "b":"World",
    "c":"AAAA",
    "d":"ZZZZ",    
};

var a = Object.keys(obj).map(function(elem){ // Get the keys, and map them
    return obj[elem];     // to their value
}).sort(); // then sort

Here is a working fiddle

你的案子:

在你的情况下,这就像是

var sortedValues = Object.keys(clientProjectsHash).map(function(elem){ // Get the keys, and map them
        return clientProjectsHash[elem];     // to their value
    }).sort();