Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中对选项列表中的多个字段进行排序_Javascript_Arrays_Sorting - Fatal编程技术网

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

如何在JavaScript中对选项列表中的多个字段进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我使用jQuery动态创建下拉菜单的选项列表,如下所示: for(var i =0 ; i < response.length ; i++){ options += '<option value="'stuff'">' + response[i].aNumber+'-'+ response[i].aString+'-'+response[i].anotherNumber + '</option>'; } for(变量i=0;i

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

for(var i =0 ; i < response.length ; i++){
   options += '<option value="'stuff'">' +  response[i].aNumber+'-'+ response[i].aString+'-'+response[i].anotherNumber + '</option>';
}
for(变量i=0;i
我想做的是按字符串aString对选项列表进行排序,第二个是按一个数字,第三个是按另一个数字

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

我目前正在使用:

$("#serviceCoverDropdown").html($('#serviceCoverDropdown option').sort(function(x, y) {
  return $(x).val() < $(y).val() ? -1 : 1;
 }))
$(“#serviceCoverDropdown”).html($(“#serviceCoverDropdown选项”).sort(函数(x,y){
返回$(x).val()<$(y).val()?-1:1;
}))
这可以正确地对aString&aNumber进行排序,但不能很好地将另一个数字组合在一起,特别是如果它有2个或更多的数字,比如10


有什么想法吗?非常感谢

请在生成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>';
}
response.sort(函数(a,b){
//这里需要排序逻辑吗
});
//现在添加选项节点
对于(变量i=0;i
除了彼得·范·德鲁宁(Peter Van Drunen)所说的之外,尝试以下方法对数组进行排序:

response.sort(function (a, b) {
    return a.aString.localeCompare(b.aString) || a.aNumber - b.aNumber;
});
根据以下示例进行更新:

response.sort(function (a, b) {

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

});

谢谢James,感谢你的帮助,我的JS不是最好的,更像是一个后端开发人员。但是我得到一个错误:a。aString.localeCompare不是函数?@Ramonster如果“aString”属性不是字符串,则可能发生这种情况。看看你的例子,“aString”和“aNumber”是另一种说法。我添加了另一个例子,在你的情况下应该会更好一些。谢谢,伙计,添加了一个toString,效果很好,感谢你的帮助