Tìm kiếm trang web

javascript - Cách sắp xếp mảng 2 chiều theo giá trị cột?


Có ai đó có thể giúp tôi sắp xếp một mảng hai chiều trong JavaScript không?

Nó sẽ có dữ liệu theo định dạng sau:

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

Nó sẽ trông như thế này khi được sắp xếp:

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

Vì vậy về cơ bản, sắp xếp theo cột đầu tiên.

Chúc sức khỏe

Câu trả lời #1

Nó đơn giản như thế này:

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;
    }
}

Tôi mời bạn đọc tài liệu.

Nếu bạn muốn sắp xếp theo cột thứ hai, bạn có thể làm điều này:

a.sort(compareSecondColumn);

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

Câu trả lời số 2

Cách tiếp cận tốt nhất là sử dụng những điều sau đây, vì có thể có các giá trị lặp lại trong cột đầu tiên.

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]
});

Câu trả lời số 3

Thử cái này:

//WITH FIRST COLUMN
arr = arr.sort((a, b) => a[0] - b[0]);

//WITH SECOND COLUMN
arr = arr.sort((a, b) => a[1] - b[1]);

Lưu ý: Câu trả lời gốc đã sử dụng dấu lớn hơn (>) thay vì dấu trừ (-), điều mà các bình luận đang đề cập là không đúng.

Câu trả lời #4

Sử dụng hàm mũi tên và sắp xếp theo trường chuỗi thứ hai

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

Câu trả lời số 5

Nếu bạn giống tôi, bạn sẽ không muốn phải thay đổi từng chỉ mục mỗi lần bạn muốn thay đổi cột mà bạn đang sắp xếp theo.

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);

Bài viết liên quan