2016-05-31 48 views
0

我有一个这样的数组:获取阵列类似项目的最大值使用Javascript

["13rq8", "13rq6", "13rq4", "13rq2", "13dl", "12dl", "13rq12", "13rq10"]

,我希望得到一个最终的阵列将组相似的价值观,从彼此只通过改变的字符串( “13rq8”, “13rq6”, “13rq4”, “13rq2”, “13rq12”, “13rq10”)的最后一个号码,只返回最大的值如下面的例子:

["13dl", "12dl", "13rq12"]

你能帮我解决这个问题吗?脚本?

谢谢!

+5

您好,欢迎光临到StackOverflow。你应该首先尝试写Javascript,然后解释你的方法遇到了什么问题,然后有人会帮助你。 – DavidS

+0

它们不仅仅是字符串的最后一个数字,而且也是中间的字母。 – Redu

+0

为什么你会认为“13dl”和“12dl”比13rq(x)更粗? –

回答

0

使用对象(前tagNum)来跟踪每个前缀的最大价值,并使用正则表达式来提取前缀和尾值:

var l = ["13rq8", "13rq6", "13rq4", "13rq2", "13dl", "12dl", "13rq12", "13rq10"]; 
 
var tagNum = {}; 
 

 
l.forEach(function(x) { 
 
    var m = x.match(/^(.*?)(\d*)$/); 
 
    var tag = m[1]; 
 
    var num = parseInt("0" + m[2]); 
 
    if (tagNum[tag] === undefined || tagNum[tag] < num) tagNum[tag] = num; 
 
}); 
 

 
var l2 = []; 
 
for (var tag in tagNum) { 
 
    var num = tagNum[tag]; 
 
    if (num) l2.push(tag + num); 
 
    else l2.push(tag); 
 
} 
 

 
console.log(l2);

+0

这会为“13rq”返回两个值,而不是一个。我认为OP的“最后数字”包括所有的尾数字,而不仅仅是最后一个数字,你可能不应该认为它们是以任何特定的顺序。 – RobG

+0

@RobG,谢谢你的见解。它已被纠正。 – Fabricator

+0

这不工作 - 我访问属性时出错! –