簡體   English   中英

如何在JavaScript中對包含字母和數字字符串的數組進行排序

[英]How to sort an array that contains strings with letters and numbers in JavaScript

我正在開發一個Web應用程序,該應用程序可以讓您測試選擇職業,它會提出90個問題,並且根據您的回答,它將顯示最適合您的職業的前三個選項的列表。

過程:

var vars = [ calc, cFis, CBio]; //array of variables with numeric values of test results.
var keys = object.keys(vars);
var newArray = [];
var names = ['Cálculo', 'Cientifico - Físico', ect]; //array of the names of the professional abilities

//first sorting the array
keys.sort(function(a,b) {
    return vars[b] - vars[a];
});
//create newArray whit the results
keys.forEach(function(key) {
    newArray.push(names[key] + ' : ' + vars[key]);
});
//print results
document.getElementById('primero').innerHTML = newArray[0];
document.getElementById('segundo').innerHTML = newArray[1];
document.getElementById('tercero').innerHTML = newArray[3];

它會顯示:

Cálculo : 60
Cientifico - Físico : 45
ect.

問題

必須使用預定義值表將vars[key]近似為一個百分比,如下所示:

Cálculo test points are between  60 - 65 then % must be 80%

現在要打印的字符串必須像: Cálculo : 80%現在為Cálculo : 80% ,假設我有3個職業和3個不同的%值, Cálculo : 80%C - Fisico : 60%art : 30%我必須按以下順序顯示其%值如下:

Cálculo : 80% C - Físico : 60% Art : 30%

有沒有一種方法可以獲取字符串中的數字字符,以便按數字順序對數組進行排序? 像上面的例子一樣?

我正在嘗試一種稱為自然排序的方法,但是它總是使用數字值之前的字母值對數組進行排序。 喜歡:

Art : 30% Cálculo : 80% C - Físico 60%

您可以做的一件事是將字符串轉換為數字(在末尾刪除% ),然后以降序對數組進行排序:

 var arr = ["Art : 30%", "Cálculo : 80%", "C - Físico: 60%"]; arr.sort(function(a, b){ // Substring between ": <substring here>%". a = +a.substring(a.indexOf(":")+1, a.length - 1); b = +b.substring(b.indexOf(":")+1, b.length - 1); return b - a; // decending order }); console.log(arr); 

對於諸如"Art : 30%"您需要在索引":"+1處開始子字符串。


執行此操作的另一種方法是使用正則表達式,使用.match(/\\d+/g)匹配字符串中的數字,以返回僅包含數字的字符串。

 var arr = ["Art : 30%", "Cálculo : 80%", "C - Físico: 60%"]; arr.sort(function(a, b) { a = +a.match(/\\d+/g); b = +b.match(/\\d+/g); return b - a; }); console.log(arr); 

請注意使用第二種方法,如果使用的數字不是百分數,則該方法將無效。 例如,如果一個是"Art1 : 30%"則第二種方法將不起作用。 解決該問題的一種方法是使用/\\d+%/g ,然后最后刪除%

暫無
暫無

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

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