내가 찾은 정규식 정렬 중 일부를 시도했지만 스트림의 + 기호가 마음에 들지 않을 것이라고 생각합니다. 정렬이 필요합니다. .숫자가 동일 할 때 알파 순서를 유지하는 스트림의 숫자 정렬
array[0] = "XXA+300" // 300 being the lowest num and XXA being before XXX
array[...]
array[7] = "AAA+800"
I : 그래서 나는 (64000 번호에 '+'0을 3 ~ 30 자) 다음과 같습니다 데이터 스트림
userString = "AAA+800|BBB+700|CCC+600|ZZZ+500|YYY+400|XXX+300|XXA+300|XXZ+300";
출력 형식으로 할 필요가 받고 있어요 가장 낮은 숫자에서 가장 높은 숫자로 순서를 바꾼다. 여기 내 비효율적 인 코드입니다. 8x8 회 반복됩니다. (내 스트림 어쩌면 200 항목 길이)
그것은 작동하지만, 그것은 더러워 보입니다. 누군가 그것을 개선하여 반복을 적게 사용하도록 도와 줄 수 있습니까?
var array = userString.split('|');
array.sort();
for(var i=0; i<len; i++) { // array2 contains just the numbers
bits = array[i].split('+');
array2[i] = bits[1];
}
array2.sort();
if(sort_order==2)
array2.reverse();
var c=0;
for(var a=0;a<len;a++) { // loop for creating array3 (the output)
for(var i=0; i<len ; i++) { // loop thru array to find matching score
bits = array[i].split('+');
if(bits[1] == array2[a]) { // found matching score
array3[c++] = bits[0]+'+'+bits[1]; // add to array3
array[i]='z+z'; // so cant rematch array position
}
}
}
array = array3;
친절 감사
안녕하십니까,에서와 같이 숫자가 반전되지만 알파는 여전히 순서대로 유지됩니다. 사실이 오류가 발생합니다 : 객체 800에 'localeCompare'메서드가 없습니다. – ChrisAdmin
어떤 브라우저입니까? 이 오류는 문자열이 아닌 객체에서'localeCompare'를 호출하고 있음을 나타냅니다. 다른 오류처럼 디버그하십시오. 'userArr','aLetters','bLetters'는 각각의 반복에서 당신이 기대하는 것을 포함하고 있는지 확인하십시오. 그렇지 않다면 이유를 알아 내십시오. 숫자를 반대로하려면 'return aLetters.localeCompare ...'를'return -aLetters.localeCompare ... '로 변경하십시오. 추가 읽기 : [(1)] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/localeCompare) [(2)] (https://developer.mozilla.org/en/JavaScript)/참조/Global_Objects/배열/정렬). –
@Jordan, 전화에 게시물을 입력 하시겠습니까? 영웅이나 중독자 :-) – Kos