반응형
배열을 정렬하는 TypeScript
나는 타이프 스크립트로 만난 매우 이상한 문제를 알아 내려고 노력해 왔습니다. 인라인 부울 표현식을 완전한 표현식 대신 첫 번째 값의 유형으로 취급했습니다.
따라서 다음과 같은 간단한 것을 시도해 보면 :
var numericArray:Array<number> = [2,3,4,1,5,8,11];
var sorrtedArray:Array<number> = numericArray.sort((n1,n2)=> n1 > n2);
결과가 부울이 아니라 숫자이기 때문에 매개 변수가 호출 대상의 서명과 일치하지 않는다는 정렬 방법에 오류가 발생합니다. 나는 n1> n2가 부울 문이라고 확신하기 때문에 뭔가를 놓치고 있다고 생각합니다.
오류는 완전히 정확합니다.
말하려고 할 때 .sort()
부울이 아닌 숫자를 반환하는 함수를 사용합니다.
첫 번째 항목이 더 작 으면 음수를 반환해야합니다. 더 크면 양수이고 같으면 0입니다.
숫자를 정렬 할 때 간결 비교를 사용할 수 있습니다.
var numericArray: number[] = [2, 3, 4, 1, 5, 8, 11];
var sortedArray: number[] = numericArray.sort((n1,n2) => n1 - n2);
즉 -
보다는 <
.
다른 것을 비교하는 경우 비교를 숫자로 변환해야합니다.
var stringArray: string[] = ['AB', 'Z', 'A', 'AC'];
var sortedArray: string[] = stringArray.sort((n1,n2) => {
if (n1 > n2) {
return 1;
}
if (n1 < n2) {
return -1;
}
return 0;
});
좋은 대답 Sohnee. 객체 배열이 있고 키로 정렬하려는 경우 거의 동일하다고 추가하고 싶습니다. 다음은 날짜 (숫자) 또는 제목 (문자열) 둘 다로 정렬 할 수있는 예제입니다.
if (sortBy === 'date') {
return n1.date - n2.date
} else {
if (n1.title > n2.title) {
return 1;
}
if (n1.title < n2.title) {
return -1;
}
return 0;
}
더 동적 인 경우 n1 [field] 대 n2 [field] 변수로 내부 값을 만들 수도 있습니다. 문자열과 숫자 사이의 차이를 유지하십시오.
let numericArray: number[] = [2, 3, 4, 1, 5, 8, 11];
let sortFn = (n1 , n2) => number { return n1 - n2; }
const sortedArray: number[] = numericArray.sort(sortFn);
일부 필드로 정렬 :
let arr:{key:number}[] = [{key : 2}, {key : 3}, {key : 4}, {key : 1}, {key : 5}, {key : 8}, {key : 11}];
let sortFn2 = (obj1 , obj2) => {key:number} { return obj1.key - obj2.key; }
const sortedArray2:{key:number}[] = arr.sort(sortFn2);
혼합 배열 정렬 (알파벳 및 숫자)
function naturalCompare(a, b) {
var ax = [], bx = [];
a.replace(/(\d+)|(\D+)/g, function (_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
b.replace(/(\d+)|(\D+)/g, function (_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });
while (ax.length && bx.length) {
var an = ax.shift();
var bn = bx.shift();
var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
if (nn) return nn;
}
return ax.length - bx.length;
}
let builds = [
{ id: 1, name: 'Build 91'},
{ id: 2, name: 'Build 32' },
{ id: 3, name: 'Build 13' },
{ id: 4, name: 'Build 24' },
{ id: 5, name: 'Build 5' },
{ id: 6, name: 'Build 56' }
]
let sortedBuilds = builds.sort((n1, n2) => {
return naturalCompare(n1.name, n2.name)
})
console.log('Sorted by name property')
console.log(sortedBuilds)
가장 쉬운 방법은 첫 번째 숫자에서 두 번째 숫자를 빼는 것입니다.
var numericArray:Array<number> = [2,3,4,1,5,8,11];
var sorrtedArray:Array<number> = numericArray.sort((n1,n2) => n1 - n2);
https://alligator.io/js/array-sort-numbers/
참고 URL : https://stackoverflow.com/questions/21687907/typescript-sorting-an-array
반응형
'Programing' 카테고리의 다른 글
UIWebView에서 확대 / 축소 / 핀치 활성화 (0) | 2020.08.12 |
---|---|
Sublime-특정 값을 포함하는 모든 줄 삭제 (0) | 2020.08.12 |
데이터베이스 디자인에 외래 키가 정말로 필요합니까? (0) | 2020.08.12 |
지난달의 파이썬 날짜 (0) | 2020.08.12 |
파일 앞에 텍스트를 추가하는 Unix 명령 (0) | 2020.08.12 |