2017-04-13 81 views
3

我试图理清一堆看起来像这样的字母数字字符:分割的字母数字字符进行排序,然后在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”。

回答

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);

+1

非常感谢您! – musicmaster988

+0

编辑:另一个问题,一旦运行,我只想输出数组的低值和高值(可以有不同数量的元素)。我尝试使用.min和.max,但不知道如何做到这一点与排序后记录的数组。所以在上面的情况下,我只需要“ZC234X”和“AD850X”。 – musicmaster988

+0

@ musicmaster988好的,完成了。 –

2

您可以排序值使用对象作为哈希表来存储元素和其编号,然后形成一个对象。

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

@Nina Scholz没问题':)' –

1

你可以进行排序只使用匹配的nummerical值。 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; }

相关问题