[javascript] 열 값으로 2 차원 배열을 정렬하는 방법은 무엇입니까?

누구든지 JavaScript에서 2 차원 배열을 정렬하는 데 도움을 줄 수 있습니까?

다음 형식의 데이터가 있습니다.

[12, AAA]
[58, BBB]
[28, CCC]
[18, DDD]

정렬하면 다음과 같이 표시됩니다.

[12, AAA]
[18, DDD]
[28, CCC]
[58, BBB]

따라서 기본적으로 첫 번째 열을 기준으로 정렬합니다.

건배



답변

이것은 간단합니다.

var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']];

a.sort(sortFunction);

function sortFunction(a, b) {
    if (a[0] === b[0]) {
        return 0;
    }
    else {
        return (a[0] < b[0]) ? -1 : 1;
    }
}

문서읽어 보시길 바랍니다 .

두 번째 열을 기준으로 정렬하려면 다음을 수행하십시오.

a.sort(compareSecondColumn);

function compareSecondColumn(a, b) {
    if (a[1] === b[1]) {
        return 0;
    }
    else {
        return (a[1] < b[1]) ? -1 : 1;
    }
}


답변

첫 번째 열에 반복적 인 값이있을 수 있으므로 가장 좋은 방법은 다음을 사용하는 것입니다.

var arr = [[12, 'AAA'], [12, 'BBB'], [12, 'CCC'],[28, 'DDD'], [18, 'CCC'],[12, 'DDD'],[18, 'CCC'],[28, 'DDD'],[28, 'DDD'],[58, 'BBB'],[68, 'BBB'],[78, 'BBB']];

arr.sort(function(a,b) {
    return a[0]-b[0]
});


답변

이 시도

//WITH FIRST COLUMN
arr = arr.sort(function(a,b) {
    return a[0] - b[0];
});


//WITH SECOND COLUMN
arr = arr.sort(function(a,b) {
    return a[1] - b[1];
});

참고 : 원래 답변은 마이너스 (-) 대신보다 큼 (>)을 사용하여 주석이 잘못된 것으로 언급했습니다.


답변

화살표 기능을 사용하고 두 번째 문자열 필드를 기준으로 정렬

var a = [[12, 'CCC'], [58, 'AAA'], [57, 'DDD'], [28, 'CCC'],[18, 'BBB']];
a.sort((a, b) => a[1].localeCompare(b[1]));
console.log(a)


답변

나와 같은 사람이라면 정렬 기준이되는 열을 변경할 때마다 각 인덱스를 변경하고 싶지 않을 것입니다.

function sortByColumn(a, colIndex){

    a.sort(sortFunction);

    function sortFunction(a, b) {
        if (a[colIndex] === b[colIndex]) {
            return 0;
        }
        else {
            return (a[colIndex] < b[colIndex]) ? -1 : 1;
        }
    }

    return a;
}

var sorted_a = sortByColumn(a, 2);


답변

특별한 것은 없습니다. 배열에서 특정 인덱스의 값을 반환하는 데 드는 비용을 절약 할 수 있습니다.

function sortByCol(arr, colIndex){
    arr.sort(sortFunction)
    function sortFunction(a, b) {
        a = a[colIndex]
        b = b[colIndex]
        return (a === b) ? 0 : (a < b) ? -1 : 1
    }
}
// Usage
var a = [[12, 'AAA'], [58, 'BBB'], [28, 'CCC'],[18, 'DDD']]
sortByCol(a, 0)
console.log(JSON.stringify(a))
// "[[12,"AAA"],[18,"DDD"],[28,"CCC"],[58,"BBB"]]"


답변

한 줄로 :

var cars = [
  {type:"Volvo", year:2016},
  {type:"Saab", year:2001},
  {type:"BMW", year:2010}
]


function myFunction() {
  return cars.sort((a, b)=> a.year - b.year)
}