如何在JavaScript

时间:2016-07-23 01:08:50

标签: javascript arrays string sorting alphanumeric

我正在开发一个网络应用程序,可以帮助您选择专业职业,它可以提出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%现在,假设我有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%

1 个答案:

答案 0 :(得分:0)

您可以做的一件事是将字符串转换为数字(最后删除%),然后按降序对数组进行排序:

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,然后删除最后的%