如何在JavaScript中的选项列表中对多个字段进行排序

时间:2018-08-31 15:30:22

标签: javascript arrays sorting

我正在使用jQuery为下拉菜单动态创建选项列表,如下所示:

let user_data = {}
const writeData = (uid, data_name, data) => {

((user_data[uid] || (user_data[uid] = {}))  && (user_data[uid][data_name] = data ))
console.log(user_data)
// perform write action
}

writeData('1',"test","test1");
writeData('2',"test","test2");
writeData('1',"test","test3");

我要执行的操作是按字符串aString排序选项列表,首先按aNumber排序,然后按anotherNumber排序。

例如,我希望它看起来像 猫1-1 猫2-1 猫2-3 狗1-1

我当前正在使用:

for(var i =0 ; i < response.length ; i++){
   options += '<option value="'stuff'">' +  response[i].aNumber+'-'+ response[i].aString+'-'+response[i].anotherNumber + '</option>';
}

这样可以正确地对aString和aNumber进行排序,但是不能很好地将anotherNumber分组在一起,特别是如果它具有2个或更多的数字(例如10)

有什么想法吗?非常感谢

2 个答案:

答案 0 :(得分:1)

在生成HTML之前尝试对响应进行排序:

response.sort(function(a, b) {
    // do sorting logic desired here
});

// now add the option nodes
for(var i = 0; i < response.length; i++){
   options += '<option value="'stuff'">' +  response[i].aNumber+'-'+ response[i].aString+'-'+response[i].anotherNumber + '</option>';
}

答案 1 :(得分:1)

添加到 Peter Van Drunen 的内容中,请尝试对数组进行排序:

response.sort(function (a, b) {

    return (
        a.aNumber.localeCompare(b.aNumber)
        || a.aString - b.aString
        || a.anotherNumber - b.anotherNumber
    );

});

根据示例进行更新:

{{1}}