使用javascript获取数组中的最大字符串值

使用javascript获取数组中的最大字符串值,javascript,arrays,string,max,Javascript,Arrays,String,Max,我有一个数组,其中包含以下格式的字符串: 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的最大值?我对regex不太了解,但试试这个: var numbers = [0, 0, 0, 0]; //a = 0, b = 1, c = 2, d = 3 string.replace(/(\d)-(\d+)(,|$)/g,

我有一个数组,其中包含以下格式的字符串:

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
的最大值?

我对regex不太了解,但试试这个:

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]));
}
var数=[0,0,0,0],i,j;

对于(i=0,j=array.length;i我对正则表达式知之甚少,但请尝试以下方法:

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]));
}
var数=[0,0,0,0],i,j;

对于(i=0,j=array.length;iSo),假设您的数组按所示顺序排列,“1-a1”表示“组1,编号,索引1”(而“1-a4”表示“组1,编号”,“索引4”和“2-b1”表示“组2,编号,索引1”等等);并假设所有部分都可以是多个编号(如“11-8812”aka)第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)
var数组=[“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;
对于(var i=0;i

您还可以使用数组而不是对象来表示
max
。如果最后一个数字始终是一个字符,则整个过程可以简化。

因此,假设您的数组按所示顺序排列,“1-a1”表示“组1,编号,索引1”(而“1-a4”表示“组1,编号”,“索引4”和“2-b1”表示“组2,编号,索引1”以此类推);假设所有部分都可以是多个数字(如“11-8812”又名“group 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)
var数组=[“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;
对于(var i=0;i

你也可以使用数组而不是对象来表示
max
。如果最后一个数字总是一个字符,整个过程可以简化。

'1-61,1-62,1-63,1-64,2-31,2-32,2-33,2-34,3-71,3-72,3-73,4-71,4-72'在这个示例中你想要什么结果?@RoyiNamir我想他想要的是a=6,b=3,c=7,d=7不,结果应该是a=64,b=34,c=73和d=72也不是字符串,它是一个包含字符串的数组elements@Omran这就是你想要的结果?'1-61,1-62,1-63,1-64,2-31,2-32,2-33,2-34,3-71,3-72,3-73,4-71,4-72'在这个样本中你想要什么结果?@RoyiNamir我想他想要的是a=6,b=3,c=7,d=7不结果应该是a=64,b=34,c=73和d=72也不是字符串,它是一个包含字符串的数组elements@Omran这就是你想要的结果?