누구든지 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)
}