[英]Javascript: How to sort array in by numbers then letters then symbols?
[英]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.