2015-01-12 4 views
0

개체 배열을 정렬 중이지만 평가 결과가 제대로 작동하지 않습니다. 모든 통찰력이 도움이 될 것입니다. 저는 서클에서 일하기 시작했습니다.js 배열 정렬이 제대로 작동하지 않습니다.

temp = [{name: 'M12-20'}, {name: 'M20-25'}]; 

a[field] = "M12-20" 
b[field] = "M20-25" 

temp.sort(function(a, b) { 
    var one = /[MFP]\d{2}/.exec(a[field]) || /[MFP]\d{1}/.exec(a[field]); 
    var two = /[MFP]\d{2}/.exec(b[field]) || /[MFP]\d{1}/.exec(b[field]); 

    return (one[0] > two[0] ? 1 : -1); 
    }); 
+1

은'.exec()'메소드는 ** 배열을 반환 ** 일치가 있다면. (숫자 값에 의한 것인가는 분명하지 않습니다.) – Pointy

+0

맞아요, 저는 돌아가고 있습니다 (한 [0]> 두 [0]? 1 : -1; 행운에) – atlMapper

+4

무엇이 '임시'인지 전혀 모르는 경우 어떻게 대답해야합니까? 재현 할 수있는 예제를 보여주십시오 : – JLRishe

답변

2

난 단지 당신이 할하려는 것은 그 각각의 값에서 첫 번째 숫자를 추출하여 비교하지만, 만약 그렇다면, 당신이 잘못을하고있는 것으로 가정 할 수있다. a[0]b[0]은 일치하는 값이있는 경우 전체 일치 값을 생성합니다.

Regex를 사용하는 것 또한 필요 이상으로 복잡합니다.

이 시도 :

var temp = [{name: 'M12-20'}, {name: 'M20-25'}], 
    field = 'name', 
    r = /[MFP](\d\d?)/; 

temp.sort(function(a, b) { 
    var one = r.exec(a[field]) || [,NaN], 
     two = r.exec(b[field]) || [,NaN]; 

    return one[1] - two[1]; 
}); 

FYI (보조 노트) - 정렬 비교 함수에 return condition ? -1 : -1;을 사용하여 거의 항상 잘못된 것입니다. 두 값이 동일한 경우 함수는 0을 반환해야합니다. 이렇게하지 않으면 부정확 한 결과, 비효율적 인 행동 또는 실제로 불행한 경우 무한 루프가 발생할 수 있습니다.

+0

절대적으로 맞습니다. – atlMapper

+1

@atlMapper 실제로 문자열의 'M'이 비교에서 벗어났습니다. – JLRishe

+0

Ahh ... 저는 각 값의 대쉬까지 숫자를 비교하려고합니다. 참조 당신의 말과 당신의 솔루션이 어떻게 작동하는지 (나는 생각합니다). 두 숫자 모두를 찾는 욕심 많은 정규식은 결과 배열을 만들거나 비교를 위해 빈 배열을 제공합니다. 감사합니다 – atlMapper

-2

이 시도 :

var temp=[]; 
temp[1]="Apple"; 
temp[2]="Orange"; 
temp[3]="Banana"; 

temp.sort(function(a, b) { 
    return return (a < b) ? 1 : -1; 
}); 

를 소스에서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

if (a is less than b by some ordering criterion) { 
    return -1; 
} 
if (a is greater than b by the ordering criterion) { 
    return 1; 
} 
// a must be equal to b 
return 0; 
+0

MDN에서 인용 한 스 니펫과는 달리, 함수는 'a'와 'b'가 같은 경우 '1'을 반환합니다. 또한이 답변이 위에 질문 된 특정 질문과 관련이있는 방법을 알지 못합니다. – JLRishe

+0

답안에 잘못된 진술이 있다는 사실은 변함이 없습니다. 내 대답의 두 번째 절반은 가능한 반환 값을 증가시킵니다. 동의 할 수 있듯이, retun 값은 th 질문의 본질입니다. 그 답에 답하지 못했습니다. – Skywalker

+1

아직 내 답변에 대해 잘못된 내용을 아직 설명하지 않았습니다. 답변이 잘못되어있는 것과 같은 이유에서 _ Not_ 부정확합니다.저는 당신이 독해 기술에 종사 할 필요가 있다고 생각합니다. 나는 당신이 독창적 인 점을 오해하고 OP의 질문에 대해 오해했기 때문입니다. 묻는 사람은 그/그녀에게 설명 된 정렬의 기초를 가질 필요가 없었습니다. S/그는 이미 많은 것을 알고있었습니다. – JLRishe

관련 문제