簡體   English   中英

使用JavaScript對數組進行函數排序

[英]Function sort an array with JavaScript

我必須編寫一個函數,該函數對包含數字和字符串的數組進行排序。
例如:

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

小提琴

您可以使用自定義比較器函數,該函數檢查參數是否為帶有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"].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;
    }
});

通常在字母前加上數字(如果這是您的問題)。

如果您想以不同的方式來信,請先致信。

一種方法是將元素排序為兩個數組(一個用於字母,一個用於數字),然后按照需要的順序合並它們。

另一種方法是將數字移到末尾。

這是一個示例:alert((uSort([3,“ 2”,4,10,“ a”,“ c”,“ b”]))))//-> [“ a”,“ b”,“ c“,1,” 2“,3,4]。

function uSort(arrayOfChars){
    var arrayNum = [];
    var arrayLet = [];
    for (i = 0; i < arrayOfChars.length; i++) { 
        if (typeof(arrayOfChars[i]) === '' ){ 
            array.unshift(arrayOfChars[i]); }
        else if (typeof(arrayOfChars[i]) === 'number' ){ 
            arrayNum.push(arrayOfChars[i]);
        } else {
            arrayLet.push(arrayOfChars[i]);
        }
    }; 

    if (arrayNum.size!=0 && arrayLet.size!=0) {
        arrayNum = arrayNum.sort(sortNumber);
        arrayNum.push();
        return arrayNum.concat(arrayLet.sort());
    } else if (arrayNum.size!=0) {
        return arrayNum.sort(sortNumber);
    } else {
        return arrayLet.sort();
    }


};

function sortNumber(a,b) {
    return a - b;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM