2012-05-10 6 views
1

를 사용하여 배열의 최대 문자열 값을 얻을 :나는 다음과 같은 형식의 문자열을 포함하는 배열을 자바 스크립트

a, b, cd이 숫자
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의 최대 값을받을 수 있나요? ... 나는 그것이 배열 어떤 결과가 있어야한다 몰랐 :

+1

'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 '이 표본에서 어떤 결과를 원하니? –

+0

@RoyiNamir 그가 a = 6, b = 3, c = 7, d = 7을 원한다고 생각합니다. –

+0

결과는 a = 64, b = 34, c = 73 및 d = 72이어야하며 문자열이 아닙니다. , 배열에 문자열 요소가 포함되어 있습니다 – Omran

답변

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/

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) 

당신이 할 수있는 루게릭 병 o max에 객체 대신 배열을 사용하십시오. 마지막 수인 이 항상 인 경우 전체 절차가 단순화 될 수 있습니다.

관련 문제