我正在尝试对一堆字母数字字符进行排序,如下所示:
[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”。
答案 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; }