我需要对nrArray
数组进行排序:
var nrArray = nrArray.sort();
以上是做什么的:
[“1”,“17”,“206”,“22”,“3”,“6”]
我需要这个:
[“1”,“3”,“6”,“17”,“22”,“206”]
答案 0 :(得分:5)
这是因为默认情况下sort()方法会进行基于字符串的比较
compareFunction
可选。指定定义的函数 排序。如果省略,则根据每个数组对数组进行排序 根据字符串,字符的Unicode代码点值 转换每个元素。
var nrArray = ["22", "17", "8", "206", "1", "3", "6"];
nrArray.sort(function(a, b) {
return a - b;
});
console.log(nrArray)

答案 1 :(得分:3)
传递比较回调并使用{/ 1}}
parseInt
<强>更新强>
您实际上不需要var arr = ["1", "17", "206", "22", "3", "6"];
arr.sort(function(a, b){
return parseInt(a)- parseInt(b);
});
console.log(arr);
,因为parseInt
会自动转换为数字。这是因为您正在减去并且javascript执行必要的类型转换。但是,a/b
不能说同样的,因为这是字符串连接。
答案 2 :(得分:1)
从SO中应用:Sort Array Elements (string with numbers), natural sort
你需要一种自然的排序。一个很好的通用自然排序,提供排序的比较,如果字符串也包含字母也可以使用:
#include <stdlib.h>
int main(void) {
size_t max = 1000;
int *a = malloc((max+1) * sizeof *a);
if (a) {
for (size_t i = 0; i <= max; i++) a[i] = i;
free(a);
}
return 0;
}
答案 3 :(得分:-1)
是的,因为你创建的字符串数组不是数字。 [1,17,206,22,3,6]应该可以正常工作。而且无需编写
var nrArray = nrArray.sort();
nrArray.sort();更改原始数组本身