我必须编写一个函数,对包含数字和字符串的数组进行排序。
例如:
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,1,"a","c","b"]) // -> [1,"2",3, 4,"a","b","c"].
我现在无法弄清楚我的代码出了什么问题。
最佳答案
一种简单的方法是将数组分成两个数组,一个数组包含数字和数字字符串(使用 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;
}));
};
关于javascript - 使用 JavaScript 函数对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065449/