拆分字母数字字符进行排序,然后在javascript

时间:2017-04-13 12:51:40

标签: javascript

我正在尝试对一堆字母数字字符进行排序,如下所示:

[AD850X, MP342X, OP452X, ZC234X, ZC540X]

排序应该只基于数字,所以我必须从这段代码中删除所有字母字符,然后我想在我为我的代码之前对它们进行排序之后添加这些字符。例如,上面的字符串首先应如下所示:

[850, 342, 452, 234, 540]

然后,

[234, 342, 452, 540, 850]

然后最后这个,

[ZC234X, MP342X, OP452X, ZC540X, AD850X]

我一直在考虑如何做到这一点,我不确定如何在前面获得相同的两个字母,以便在排序后重新连接到数字代码(最后一个字符,在本例中为“X”)总是会是相同的,我会在添加前两个字母字符后连接这个值。

如果有人能帮助我,我会非常感激。

谢谢!

编辑:另一个问题,一旦运行,我想只输出数组的低值和高值(可以有不同数量的元素)。我尝试使用.min和.max但不确定如何使用排序后记录的数组。所以在上面的例子中我只需要“ZC234X”和“AD850X”。

3 个答案:

答案 0 :(得分:2)

您可以使用object作为哈希表来存储元素及其编号,然后按该对象的值排序。



var data = ['AD850X', 'MP342X', 'OP452X', 'ZC234X', 'ZC540X'];
var obj = {}

data.forEach(e => obj[e] = e.match(/\d+/)[0])
var result = data.sort((a, b) => obj[a] - obj[b]);
console.log(result)




答案 1 :(得分:1)

除了通过删除两个首字母然后排序使其复杂化,您可以只对数组进行排序,只比较每个元素内的匹配数字。



var arr = ['AD850X', 'MP342X', 'OP452X', 'ZC234X', 'ZC540X'],
    res = arr.sort((a,b) => a.match(/\d+/)[0] - b.match(/\d+/)[0]),
    min = res[0],
    max = res[res.length-1];
 
    console.log("min value: " + min + " | max value: " + max);




答案 2 :(得分:1)

您只能使用匹配的数值进行排序。 Array#sort就地工作。

如果正则表达式与数字不匹配,则此提案使用默认值。

var array = ['AD850X', 'MP342X', 'OP452X', 'ZC234X', 'ZC540X'];

array.sort((a, b) => (a.match(/\d+/) || 0) - (b.match(/\d+/) || 0));

console.log('min value', array[0]);
console.log('max value', array[array.length - 1]);
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }