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

时间:2012-05-10 09:21:48

标签: 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

其中abcd是数字。

现在,如何在此数组中获取a的最大值,b的最大值,c的最大值,d的最大值?< / p>

2 个答案:

答案 0 :(得分:1)

我不太了解正则表达式,但试试这个:

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 :(得分:0)

因此,假设您的数组按照您的显示进行排序,“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的对象。如果最后一个数字总是一个字符,则整个过程可以简化。