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

按字母顺序对javascript填充的选择列表排序,javascript,Javascript,我试图对我的javascript弹出选择列表进行排序,我搜索了这个网站上的所有其他帖子,但我无法让它工作 下面是我的javascript,它自动从SQL db中的数据填充选择列表: for (clientKey in clientProjectsHash) { //alert("client:" + clientKey + ", name: " + clientProjectsHash[clientKey].name); clientSelect.

我试图对我的javascript弹出选择列表进行排序,我搜索了这个网站上的所有其他帖子,但我无法让它工作

下面是我的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;
        }
    }
}

试着这样做:

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;
            }
        }
}
var list=[];
用于(输入客户端项目SHASH)
列表。按(键);
list.sort();
对于(变量i=0;i 0){
selectedClientId=clientKey;
}
}
}

尝试以下方法:

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;
            }
        }
}
var list=[];
用于(输入客户端项目SHASH)
列表。按(键);
list.sort();
对于(变量i=0;i 0){
selectedClientId=clientKey;
}
}
}
我们开始吧

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

  • 可以使用获取对象的可枚举属性

  • 然后,可以使用将每个关键点转换为其在对象中的值

(在这两种浏览器中,该链接都有一个适用于旧浏览器的垫片)

  • 然后你可以对它们调用普通函数
示例

假设你的物体是

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();
你的情况: 在你的情况下,这可能是

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();
我们开始吧

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

  • 可以使用获取对象的可枚举属性

  • 然后,可以使用将每个关键点转换为其在对象中的值

(在这两种浏览器中,该链接都有一个适用于旧浏览器的垫片)

  • 然后你可以对它们调用普通函数
示例

假设你的物体是

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();
你的情况: 在你的情况下,这可能是

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();

clientProjectsHash
是一个
数组
还是一个
对象
?没关系,从你的代码中看,它是一个
对象
。对象没有
.sort()
方法。这就是问题所在。给我一秒钟,我将推动一项工作,您可以将所有键拉入一个数组,对数组进行排序,然后在排序后进行检查。仅供将来参考
array.sort()
返回新数组并修改原始数组。参见
var a=['b','c','a'];a、 排序();控制台日志(a)
gives.Thank,@pebbl我觉得它没有动原始数组。@JasonNichols不用担心,它是一个烦人的函数,不能达到你的期望:)是
clientProjectsHash
一个
数组
对象
?没关系,从你的代码看,它是一个
对象
。对象没有
.sort()
方法。这就是问题所在。给我一秒钟,我将推动一项工作,您可以将所有键拉入一个数组,对数组进行排序,然后在排序后进行检查。仅供将来参考
array.sort()
返回新数组并修改原始数组。参见
var a=['b','c','a'];a、 排序();控制台日志(a)
gives.Thank,@pebbl I给人的印象是它没有触及原始数组。@JasonNichols不用担心,这是一个无法达到预期效果的恼人函数:)