函数使用JavaScript对数组进行排序
我必须编写一个函数,对包含数字和字符串的数组进行排序。函数使用JavaScript对数组进行排序,javascript,arrays,string,sorting,numbers,Javascript,Arrays,String,Sorting,Numbers,我必须编写一个函数,对包含数字和字符串的数组进行排序。 例如: uSort([3,"2", 4,1,"a","c","b"]) // -> ["a","b","c",1,"2",3, 4]. 这就是我迄今为止所尝试的: function uSort(arrayOfChars){ var array = []; for (i = 0; i < arrayOfChars.length; i++) { if (typeof(arrayOfChars[i
例如:
uSort([3,"2", 4,1,"a","c","b"]) // -> ["a","b","c",1,"2",3, 4].
这就是我迄今为止所尝试的:
function uSort(arrayOfChars){
var array = [];
for (i = 0; i < arrayOfChars.length; i++) {
if (typeof(arrayOfChars[i]) === '' ){
array.unshift(arrayOfChars[i]); }
else {
array.push(arrayOfChars[i]);
};
};
return array.sort();
};
我现在不知道我的代码出了什么问题。字母前加数字是正常的(如果这是您的问题) 如果你想在有不同的方式之前先有信 一种方法是将元素排序为两个数组(一个用于字母,一个用于数字),然后按需要的顺序合并它们 另一种方法是移动末尾的数字 这是一个例子: 警报((uSort([3,“2”,4,10,“a”,“c”,“b”]))/->[“a”,“b”,“c”,1,“2”,3,4]
函数uSort(arrayOfChars){
var arrayNum=[];
var arrayLet=[];
对于(i=0;i
字母前有数字是正常的(如果这是您的问题)
如果你想在有不同的方式之前先有信
一种方法是将元素排序为两个数组(一个用于字母,一个用于数字),然后按需要的顺序合并它们
另一种方法是移动末尾的数字
这是一个例子:
警报((uSort([3,“2”,4,10,“a”,“c”,“b”]))/->[“a”,“b”,“c”,1,“2”,3,4]
函数uSort(arrayOfChars){
var arrayNum=[];
var arrayLet=[];
对于(i=0;i
一种简单的方法是将数组拆分为两个数组,一个包含数字和字符串(使用isNaN
),另一个数组包含所有其他内容,然后对它们进行排序并将它们重新连接在一起
function uSort(arrayOfChars){
var numbs = arrayOfChars.filter(function(item) { return isNaN(item) });
var chars = arrayOfChars.filter(function(item) { return !isNaN(item) });
return numbs.sort().concat( chars.sort() );
};
为了更好地对整数和特殊字符进行排序,可以向排序中添加回调
function uSort(arrayOfChars){
var numbs = arrayOfChars.filter(function(item) { return !isNaN(item) });
var chars = arrayOfChars.filter(function(item) { return isNaN(item) });
return chars.sort(function(a, b) {
return a.localeCompare(b);
}).concat( numbs.sort(function(a, b) {
return a == b ? 1 : a - b;
}));
};
一种简单的方法是将数组拆分为两个数组,一个包含数字和字符串(使用
isNaN
),另一个数组包含所有其他内容,然后对它们进行排序并将它们重新连接在一起
function uSort(arrayOfChars){
var numbs = arrayOfChars.filter(function(item) { return isNaN(item) });
var chars = arrayOfChars.filter(function(item) { return !isNaN(item) });
return numbs.sort().concat( chars.sort() );
};
为了更好地对整数和特殊字符进行排序,可以向排序中添加回调
function uSort(arrayOfChars){
var numbs = arrayOfChars.filter(function(item) { return !isNaN(item) });
var chars = arrayOfChars.filter(function(item) { return isNaN(item) });
return chars.sort(function(a, b) {
return a.localeCompare(b);
}).concat( numbs.sort(function(a, b) {
return a == b ? 1 : a - b;
}));
};
您可以使用自定义比较器函数,该函数使用
isNaN
检查参数是否为数字,然后使用数字或字典排序:
[3, "2", 4, 1, "a", "c", "b"].sort(function(a,b) {
if(isNaN(a) || isNaN(b)) {
if(!isNaN(a)) return +1; // Place numbers after strings
if(!isNaN(b)) return -1; // Place strings before numbers
return a < b ? -1 : (a > b ? +1 : 0); // Sort strings lexicographically
}
return a - b; // Sort numbers numerically
}); // ["a", "b", "c", 1, "2", 3, 4]
[3,“2”,4,1,“a”,“c”,“b”]排序(函数(a,b){
if(isNaN(a)| | isNaN(b)){
如果(!isNaN(a))返回+1;//将数字放在字符串后面
if(!isNaN(b))返回-1;//将字符串放在数字之前
返回ab?+1:0);//按字典顺序对字符串排序
}
返回a-b;//对数字进行数字排序
}); // [“a”、“b”、“c”、“1”、“2”、“3、4]
您可以使用自定义比较器函数,该函数使用isNaN
检查参数是否为数字,然后使用数字或字典排序:
[3, "2", 4, 1, "a", "c", "b"].sort(function(a,b) {
if(isNaN(a) || isNaN(b)) {
if(!isNaN(a)) return +1; // Place numbers after strings
if(!isNaN(b)) return -1; // Place strings before numbers
return a < b ? -1 : (a > b ? +1 : 0); // Sort strings lexicographically
}
return a - b; // Sort numbers numerically
}); // ["a", "b", "c", 1, "2", 3, 4]
[3,“2”,4,1,“a”,“c”,“b”]排序(函数(a,b){
if(isNaN(a)| | isNaN(b)){
如果(!isNaN(a))返回+1;//将数字放在字符串后面
if(!isNaN(b))返回-1;//将字符串放在数字之前
返回ab?+1:0);//按字典顺序对字符串排序
}
返回a-b;//对数字进行数字排序
}); // [“a”、“b”、“c”、“1”、“2”、“3、4]
编写自己的自定义排序方法
[3,"2", 4,1,"a","c","b"].sort( function (a,b) {
var sa = isNaN(a);
var sb = isNaN(b);
if(sa && sb) { //If both are strings, than compare
return sa>sb;
} else if (!sa && !sb) { //if both are numbers, convert to numbers and compare
return Number(a) - Number(b);
} else { //if we have a number and a string, put the number last.
return sa ? -1 : 1;
}
});
编写自己的自定义排序方法
[3,"2", 4,1,"a","c","b"].sort( function (a,b) {
var sa = isNaN(a);
var sb = isNaN(b);
if(sa && sb) { //If both are strings, than compare
return sa>sb;
} else if (!sa && !sb) { //if both are numbers, convert to numbers and compare
return Number(a) - Number(b);
} else { //if we have a number and a string, put the number last.
return sa ? -1 : 1;
}
});
那么数字之前的字符串呢?没错。
typeof
将永远不会返回'
。您不应该取消正在排序的数组的升序,将它们移到末尾将在排序之后产生零差异。您需要编写自己的自定义排序方法。那么数字之前的字符串呢?没错。typeof
将永远不会返回'
。您不应该取消正在排序的数组的升序,将它们移到末尾将在排序之后产生零差异。您需要编写自己的自定义排序方法。是的,但从技术上讲,“2”
不是一个数字,因此您还必须添加类型转换是的,这就是我使用array.unshift将数字放在末尾的原因,但它仍然不起作用。没有理由这样做,而且添加两个数组不会生成一个数组。这是完全错误的,这不起作用。在示例uSort([3,“2”,4,1,10,“a”,“c”,“b”])
返回1,10,3,42,a,b,c
仅最后一行(创建字符串)是错误的。。。顺便说一句,另一个是正确的。。。您只需要使用concat()True,但从技术上讲,“2”
不是一个数字,因此您还必须添加类型转换是的,这就是我使用array.unshift将数字放在末尾的原因,但它仍然不起作用。没有理由这样做,添加两个数组也不会生成数组。这是完全错误的,这不起作用。