javascript数组方法sort返回大于50的120
下面的代码将数组中的整数排序错误,结果为:1,10100,30,40,50,80javascript数组方法sort返回大于50的120,javascript,Javascript,下面的代码将数组中的整数排序错误,结果为:1,10100,30,40,50,80 var arr = new Array(); arr = [50,100,30,40,80,10,1]; var z = arr.sort(); console.error(z); 这是因为它将它们排序为字符串而不是数字。从: 如果未提供compareFunction,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来对元素进行排序。例如,“香蕉”在“樱桃”之前。在数字排序中,9位于80之前,
var arr = new Array();
arr = [50,100,30,40,80,10,1];
var z = arr.sort();
console.error(z);
这是因为它将它们排序为字符串而不是数字。从: 如果未提供
compareFunction
,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来对元素进行排序。例如,“香蕉”在“樱桃”之前。在数字排序中,9位于80之前,但由于数字转换为字符串,所以在Unicode顺序中,“80”位于“9”之前
您需要做的是给它一个回调,将它们按数字排序:
arr.sort(function(a, b){
return a - b;
});
这是因为它将它们排序为字符串而不是数字。从: 如果未提供
compareFunction
,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来对元素进行排序。例如,“香蕉”在“樱桃”之前。在数字排序中,9位于80之前,但由于数字转换为字符串,所以在Unicode顺序中,“80”位于“9”之前
您需要做的是给它一个回调,将它们按数字排序:
arr.sort(function(a, b){
return a - b;
});
根据的文档,“默认排序顺序是根据字符串Unicode代码点。”这将为您提供词汇排序,而您通常不希望对数字进行这种排序
具体而言,的定义了普通排序函数,步骤5和7将参数显式转换为字符串:
xString
成为字符串(x
)xString
)yString
设置为字符串(y
)yString
)xString
,则返回−一,xString>yString
,则返回1var arr=new Array();
arr=[50,100,30,40,80,10,1];
var z=arr.sort(函数(a,b){
如果(a根据的文档,“默认排序顺序是根据字符串Unicode代码点。”这将为您提供词汇排序,而您通常不希望对数字进行这种排序
具体而言,的定义了普通排序函数,步骤5和7将参数显式转换为字符串:
让xString
成为字符串(x
)
ReturnIfAbrupt(xString
)
将yString
设置为字符串(y
)
ReturnIfAbrupt(yString
)
如果xString
,则返回−一,
如果xString>yString
,则返回1
返回+0
您应该提供自己的排序函数,该函数不将值视为字符串,如:
var arr=new Array();
arr=[50,100,30,40,80,10,1];
var z=arr.sort(函数(a,b){
如果(a
方法对数组的项进行排序
排序顺序可以是字母或数字,也可以是升序(向上)或降序(向下)
默认情况下,sort()方法按字母顺序和升序将值排序为字符串
这适用于字符串(“苹果”在“香蕉”之前”)
。但是,如果数字按字符串排序,“25”大于“100”,因为“2”大于“1”
因此,排序数字时,sort()方法将产生不正确的结果
您可以通过提供“比较函数”来解决此问题:array.sort(比较函数)
排序()方法对数组中的项进行排序
排序顺序可以是字母或数字,也可以是升序(向上)或降序(向下)
默认情况下,sort()方法按字母顺序和升序将值排序为字符串
这适用于字符串(“苹果”在“香蕉”之前”)
。但是,如果数字按字符串排序,“25”大于“100”,因为“2”大于“1”
因此,排序数字时,sort()方法将产生不正确的结果
您可以通过提供“比较函数”来解决此问题:array.sort(比较函数)
我知道这是违反直觉的,但它将数据从A排序到Z。var arr=[50100,30,40,80,10,1];sort(函数(a,b){返回a-b;});控制台日志(arr)
()PROTIP:不要使用newarray()
,只需执行var arr=[50100,30,40,80,10,1]代码>。我知道这是违反直觉的,但它将数据从A到Z排序为。var arr=[50100,30,40,80,10,1];sort(函数(a,b){返回a-b;});控制台日志(arr)
()PROTIP:不要使用newarray()
,只需执行var arr=[50100,30,40,80,10,1]代码>。