Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting - Fatal编程技术网

使用函数'对javascript数组进行排序;排序“;

使用函数'对javascript数组进行排序;排序“;,javascript,sorting,Javascript,Sorting,我正在尝试对javascript数组进行排序,该数组包含任何类型的数据,比如数字、字符串、日期、时间等。我的逻辑对除数字以外的所有数据类型都很有效。它将数字视为字符串 例如,我有一个如下所示的数组: array = ["1","2","12","22","33","3"] 我希望排序数组是1,2,3,12,22,33…,但它给出了:1,12,2,22,3,33… 任何人都可以改进我的代码,它必须适用于任何类型的数据类型 以下是我的排序代码: function sortTable(a,b){

我正在尝试对javascript数组进行排序,该数组包含任何类型的数据,比如数字、字符串、日期、时间等。我的逻辑对除数字以外的所有数据类型都很有效。它将数字视为字符串

例如,我有一个如下所示的数组:

array = ["1","2","12","22","33","3"]
我希望排序数组是
1,2,3,12,22,33…
,但它给出了:
1,12,2,22,3,33…

任何人都可以改进我的代码,它必须适用于任何类型的数据类型

以下是我的排序代码:

function sortTable(a,b){
    if(sortMode=="A"){
    if(a[1]>b[1]) return 1;
        if(a[1]<b[1]) return -1;
    }
    else if( sortMode=="D"){
        if(a[1]>b[1]) return -1;
        if(a[1]<b[1]) return 1;
    }
    return 0;     
}
array.sort(sortTable);
函数可排序(a,b){
如果(排序模式==“A”){
如果(a[1]>b[1])返回1;
如果(a[1]b[1])返回-1;

如果(a[1]无法获得预期输出的原因是,当两个操作数都是字符串类型时,会按字母顺序对它们进行比较。它们不会自动转换为数字

"2" > "12" // result is true
如果其中一个操作数是数字,则比较运算符将另一个操作数从字符串转换为数字

"2" > 12 // result is false
需要指出的另一点是,在数字数组的情况下,您试图访问索引1处的数组元素

if(a[1]>b[1]) return 1;
这应该是:

if( a > b ) return 1;

我会分别处理每个数据类型,而不是编写这样的泛型函数。

无法获得预期输出的原因是,当两个操作数都是字符串类型时,会对它们进行字母顺序比较。它们不会自动转换为数字

"2" > "12" // result is true
如果其中一个操作数是数字,则比较运算符将另一个操作数从字符串转换为数字

"2" > 12 // result is false
需要指出的另一点是,在数字数组的情况下,您试图访问索引1处的数组元素

if(a[1]>b[1]) return 1;
这应该是:

if( a > b ) return 1;

我会分别处理每种数据类型,而不是编写这样一个通用函数。

我编写了两个正则表达式条件,用于检查某些数据结构。(您总是可以根据“typeof(a)”或“typeof(b)”是什么来做一个大的switch语句分支。)这些检查确定字符串中的值是否应解释为字符串以外的内容

function sortVals(a,b){
    //other code here  
    var aT=a+"", bT=b+"";    //a and b as strings
    if(!aT.match(/[^0-9]/) && !bT.match(/[^0-9]/)){//no non-numbers were found
        a = parseInt(aT, 10);
        b = parseInt(bT, 10);
        if(a!=b)
            return a<b?1:-1;    //returns 1 if a<b; -1 if a>b
    }else if(!aT.match(/[^0-9\.]|\..*\./) && !bT.match(/[^0-9\.]|\..*\./)){//only valid floats were found
        a = parseFloat(aT);
        b = parseFloat(bT);
        if(a!=b)
            return a<b?1:-1;
    }
}
函数排序(a、b){
//这里还有其他代码
var aT=a+“”,bT=b+“”;//a和b作为字符串
如果(!aT.match(/[^0-9]/)和&!bT.match(/[^0-9]/){//未找到非数字
a=parseInt(aT,10);
b=parseInt(bT,10);
如果(a!=b)

返回a我编写了两个正则表达式条件,用于检查某些数据结构。(您总是可以根据“typeof(a)”或“typeof(b)”是什么来生成一个大的switch语句分支。)这些检查确定字符串中的值是否应解释为字符串以外的内容

function sortVals(a,b){
    //other code here  
    var aT=a+"", bT=b+"";    //a and b as strings
    if(!aT.match(/[^0-9]/) && !bT.match(/[^0-9]/)){//no non-numbers were found
        a = parseInt(aT, 10);
        b = parseInt(bT, 10);
        if(a!=b)
            return a<b?1:-1;    //returns 1 if a<b; -1 if a>b
    }else if(!aT.match(/[^0-9\.]|\..*\./) && !bT.match(/[^0-9\.]|\..*\./)){//only valid floats were found
        a = parseFloat(aT);
        b = parseFloat(bT);
        if(a!=b)
            return a<b?1:-1;
    }
}
函数排序(a、b){
//这里还有其他代码
var aT=a+“”,bT=b+“”;//a和b作为字符串
如果(!aT.match(/[^0-9]/)和&!bT.match(/[^0-9]/){//未找到非数字
a=parseInt(aT,10);
b=parseInt(bT,10);
如果(a!=b)

返回a正如前面提到的,您需要识别数据类型。但是这里有一个,您可以用于字符串/整数

var sortMethod = function(x,y){
    var a = x|0 , 
        b = y|0; 
    return (a>b) ? 1 : -1;
});

var x = ["1", "34" , "3" , "12"].sort(sortMethod);
var y = [3,52,123,1].sort(sortMethod); 

如前所述,您需要识别数据类型。但这里有一个,您可以用于字符串/整数

var sortMethod = function(x,y){
    var a = x|0 , 
        b = y|0; 
    return (a>b) ? 1 : -1;
});

var x = ["1", "34" , "3" , "12"].sort(sortMethod);
var y = [3,52,123,1].sort(sortMethod); 

您不能创建一个像这样处理所有数据类型的排序函数。您必须让它接受一个标志,该标志定义了如何对值进行排序(例如,数字排序、字典排序)可能还有一个转换函数。这不仅仅是精炼代码……如果你只是想让字符串按数字排序,那么就把字符串转换成数字,这里解释如下:我可以把字符串解析成整数……但是如果我的数组是这样的{“印度”、“中国”、“俄罗斯”}。我们可以将这些字符串转换为整数吗?谢谢。。如果数组包含多个数据类型,您知道这些类型应该如何排序吗?也就是说,日期应该在字符串之前,数字应该在日期之前,等等?这样您的数组可以是
[“1”、“12”、“2”、“印度”、“中国”]
?排序后您希望它是什么样子?@RamaRaoM您可以编写一个排序函数来检查被排序的值的类型,但这似乎不必要地笨拙,即使这样做,您怎么知道在某些情况下,字符串需要强制为数字?您无法创建一个与所有数据类型都是这样的。您必须让它接受一个标志,该标志定义了如何对值进行排序(例如,数字排序、字典排序)可能还有一个转换函数。这不仅仅是精炼代码……如果你只是想让字符串按数字排序,那么就把字符串转换成数字,这里解释如下:我可以把字符串解析成整数……但是如果我的数组是这样的{“印度”、“中国”、“俄罗斯”}。我们可以将这些字符串转换为整数吗?谢谢。。如果数组包含多个数据类型,您知道这些类型应该如何排序吗?也就是说,日期应该在字符串之前,数字应该在日期之前,等等?这样您的数组可以是
[“1”、“12”、“2”、“印度”、“中国”]
?排序后您希望它是什么样子?@ramaroam您可以编写一个排序函数来检查被排序的值的类型,但这似乎不必要地笨拙,即使您这样做,您怎么知道在某些情况下,字符串需要强制成数?