1

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

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

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;
        }
    }
}
4

2 回答 2

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;
            }
        }
}
于 2013-05-31T21:26:37.017 回答
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

这是一个工作小提琴

你的情况:

在您的情况下,这将类似于

var sortedValues = Object.keys(clientProjectsHash).map(function(elem){ // Get the keys, and map them
        return clientProjectsHash[elem];     // to their value
    }).sort();
于 2013-06-05T16:30:30.900 回答