Programing

배열을 정렬하는 TypeScript

lottogame 2020. 8. 12. 22:07
반응형

배열을 정렬하는 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

반응형