次の形式の文字列を含む配列があります。
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
。最後の数字が常に1文字であれば、手順全体を簡略化できます。