在Javascript中执行不区分大小写的排序并获取TypeError:a.toLowerCase不是一个函数

在Javascript中执行不区分大小写的排序并获取TypeError:a.toLowerCase不是一个函数,javascript,Javascript,我有一个数组(myarray),它包含大小写混合的值,范围从a、a、。。。z、 z。 我使用以下机制对其进行排序,不考虑大小写,这意味着所有大写字母应首先排序,然后是小写字母,以便排序后的结果如下所示: Abc,Abd,abs,abp,Back,Bann,bike。。。等等 我是这样做的 var myarray= new Array(); for (i=0; i<select.options.length; i++) { myarray[i] = new Array(); myarray[

我有一个数组(myarray),它包含大小写混合的值,范围从a、a、。。。z、 z。 我使用以下机制对其进行排序,不考虑大小写,这意味着所有大写字母应首先排序,然后是小写字母,以便排序后的结果如下所示:

Abc,Abd,abs,abp,Back,Bann,bike。。。等等

我是这样做的

var myarray= new Array();
for (i=0; i<select.options.length; i++) {
myarray[i] = new Array();
myarray[i][0] = select.options[i].text;
myarray[i][1] = select.options[i].value;
}           


myarray.sort(function (a, b) {
    return a.toLowerCase().localeCompare(b.toLowerCase());
});
var myarray=new Array();

对于(i=0;i您正在对由数组而不是字符串组成的数组进行排序,因此需要指定要用于排序的数组项

我不知道您是想按文本还是按值对数组排序,但假设您想按选项值对其排序:

myarray.sort(function (a, b) {
    return a[1].toLowerCase().localeCompare(b[1].toLowerCase());
});

所以,实际上有一个嵌套数组,如

[ ['text1','valie1'],['text2','valie2'],['text2','valie2']]
但是当你使用你的函数时

myarray.sort(function (a, b) {
    return a.toLowerCase().localeCompare(b.toLowerCase());
});
a
b
是类似于
['text1','valie1']
的数组,而不是字符串

所以你需要改变你的排序函数

myarray.sort(function (a, b) {
    var textCompare = a[0].toLowerCase().localeCompare(b[0].toLowerCase());
    var valueCompare =a[1].toLowerCase().localeCompare(b[1].toLowerCase()); 
    return textCompare || valueCompare;
});

此外,在函数中,您可以传递区域设置和选项,如
敏感度
,因此您不需要使用
来传递小写字母

什么​​​​是
a
toLowerCase
是a。您的数组可能包含其他内容。是的,我的数组不仅包含字符串。它还包含一些值和文本。完整的代码发布在我的答案中,请参见下面的内容