我有一个包含以下格式的字符串的数组:
1-a1,1-a2,1-a3,1-a4,2-b1,2-b2,2-b3,2-b4,3-c1,3-c2,3-c3,4-d1,4-d2
其中a
, b
, c
, 和d
是数字。
现在,我怎样才能得到这个数组中的最大值、a
最大值b
、最大值c
、最大值?d
我有一个包含以下格式的字符串的数组:
1-a1,1-a2,1-a3,1-a4,2-b1,2-b2,2-b3,2-b4,3-c1,3-c2,3-c3,4-d1,4-d2
其中a
, b
, c
, 和d
是数字。
现在,我怎样才能得到这个数组中的最大值、a
最大值b
、最大值c
、最大值?d
我对正则表达式了解不多,但试试这个:
var numbers = [0, 0, 0, 0]; //a = 0, b = 1, c = 2, d = 3
string.replace(/(\d)-(\d+)(,|$)/g, function($0, $1, $2) { numbers[parseInt($1) - 1] = Math.max(parseInt($2), numbers[parseInt($1) - 1]); });
编辑:我不知道它是一个数组,结果应该是什么...... 所以这是我对您的问题的解决方案:
var numbers = [0, 0, 0, 0], i, j;
for(i=0,j=array.length;i<j;++i) {
array[i] = array[i].split('-');
numbers[parseInt(array[i][0]) - 1] = Math.max(numbers[parseInt(array[i][0]) - 1], parseInt(array[i][1]));
}
JSfiddle:http: //jsfiddle.net/UQWLe/1/
因此,假设您的数组按您显示的顺序排列,并且“1-a1”表示“组 1,编号,索引 1”(并且“1-a4”表示“组 1,编号,“索引 4”和“2-b1 ” 表示“第 2 组,编号,索引 1”等等);并假设所有部分都可能不止一个数字(如“11-8812”又名“第 11 组,一个像 88 的数字和一个像 12 的索引” ); 你可以有类似的东西:
var array = ["1-81","1-102","1-93","1-24","2-881","2-122","2-13","2-984","3-2121","3-12","3-93","4-41","4-22"]
var max = {};
var group = "", count = 0;
for (var i = 0; i < array.length; i++) {
var parts = array[i].split("-");
if (group !== parts[0]) {
group = parts[0];
count = 0;
}
count++;
var number = +parts[1].replace(new RegExp(count + "$"), "");
max[group] = Math.max(max[group] || 0, number)
}
console.log(max)
您也可以使用数组代替对象max
。如果最后一个数字总是一个字符,则整个过程可以简化。