javascript - 使用 JavaScript 函数对数组进行排序

标签 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]) === '' ){ 
            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() );
};

FIDDLE

为了更好地对整数和特殊字符进行排序,您可以在排序中添加回调

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;
    }));
};

FIDDLE

关于javascript - 使用 JavaScript 函数对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065449/

相关文章:

java - DDMS java 分析器显示 : java/lang/StringBuilder. <init> - 它在我的代码中的什么位置?

javascript - 在网站上全局加载脚本

javascript - 在 jQuery 中将 2 个函数合并为一个

javascript - 有没有办法将 Javascript 对象附加到选择选项

javascript - Google Plus API 错误 gapi.loaded_0

python - 从python中的多值元素数组打印特定值

c++ - 数组折叠成单个元素

PHP 数组生成器

java - 如何区分数字和字符串

r - 多字符串替换,在 R 中使用 gsubfn()