Computer >> Máy Tính >  >> Lập trình >> Javascript

Sắp xếp theo thuộc tính 'tiếp theo' và 'trước đó' (hàm so sánh JS)

Đây là mảng đối tượng mẫu của chúng tôi, hãy coi mỗi đối tượng như đại diện cho một số trang của trang web đa trang, mỗi đối tượng có một thuộc tính tiếp theo (trừ khi nó đại diện cho trang cuối cùng) trỏ đến một số id của một đối tượng khác và một thuộc tính trước đó (trừ khi nó đại diện cho đầu tiên trang) trỏ đến một số id của đối tượng trước đó của nó.

Tất cả các đối tượng này được đặt ngẫu nhiên ngay bây giờ, công việc của chúng tôi là sắp xếp chúng theo đúng vị trí của chúng -

let arr = [
   { id: "1325asdfasdasd", next: "5345341fgdfgdd", previous:"545234123fsdfd" },
   { id: "das987as9dya8s", next: "3j12k3b1231jkj" },
   { id: "89ad8sasds9d8s", previous: "1j3b12k3jbasdd" },
   { id: "5345341fgdfgdd", next: "1j3b12k3jbasdd", previous:"1325asdfasdasd" },
   { id: "1423123123asfd", next: "545234123fsdfd", previous:"3j12k3b1231jkj" },
   { id: "1j3b12k3jbasdd", next: "89ad8sasds9d8s", previous:"5345341fgdfgdd" },
   { id: "3j12k3b1231jkj", next: "1423123123asfd", previous:"das987as9dya8s" },
   { id: "545234123fsdfd", next: "1325asdfasdasd", previous:"1423123123asfd" },
];

Chúng ta cần phải sắp xếp nó để các đối tượng không có trước đó đến trước và đối tượng không có quảng cáo tiếp theo và với các đối tượng tiếp theo và trước đó trỏ đến các id chính xác

Chúng tôi sẽ giải quyết vấn đề này trong hai bước -

Bước 1 - Chúng tôi lặp lại trên toàn bộ mảng, lưu trữ id dưới dạng khóa và đối tượng dưới dạng giá trị trong bản đồ và lưu trữ đối tượng không có trước đó trong một biến riêng biệt -

const objectMap = new Map();
let firstObject;
const sortedArray = [];
for(const obj of arr){
   objectMap.set(obj.id, obj);
   if(!obj.previous){
      firstObject = obj;
   }
}

Bước 2 - Chúng tôi bắt đầu một vòng lặp qua các phần tử của bản đồ và bắt đầu truy cập và đẩy các đối tượng tiếp theo của mỗi thành viên khi chúng tôi đến cuối -

for(let start = firstObject; start; start = objectMap.get(start.next)){
   sortedArray.push(start);
};
console.log(sortedArray);

Bây giờ chúng ta hãy xem ví dụ hoàn chỉnh với đầu ra -

Ví dụ

let arr = [
   { id: "1325asdfasdasd", next: "5345341fgdfgdd", previous:"545234123fsdfd" },
   { id: "das987as9dya8s", next: "3j12k3b1231jkj" },
   { id: "89ad8sasds9d8s", previous: "1j3b12k3jbasdd" },
   { id: "5345341fgdfgdd", next: "1j3b12k3jbasdd", previous:"1325asdfasdasd" },
   { id: "1423123123asfd", next: "545234123fsdfd", previous:"3j12k3b1231jkj" },
   { id: "1j3b12k3jbasdd", next: "89ad8sasds9d8s", previous:"5345341fgdfgdd" },
   { id: "3j12k3b1231jkj", next: "1423123123asfd", previous:"das987as9dya8s" },
   { id: "545234123fsdfd", next: "1325asdfasdasd", previous:"1423123123asfd" },
];
const objectMap = new Map();
let firstObject;
const sortedArray = [];
for(const obj of arr){
   objectMap.set(obj.id, obj);
   if(!obj.previous){
      firstObject = obj;
   }
}
for(let start = firstObject; start; start = objectMap.get(start.next)){
   sortedArray.push(start);
};
console.log(sortedArray);

Đầu ra

Đầu ra của mã trong bảng điều khiển sẽ là -

[
   { id: 'das987as9dya8s', next: '3j12k3b1231jkj' },
   {
      id: '3j12k3b1231jkj',
      next: '1423123123asfd',
      previous: 'das987as9dya8s'
   },
{
   id: '1423123123asfd',
   next: '545234123fsdfd',
   previous: '3j12k3b1231jkj'
},
{
   id: '545234123fsdfd',
   next: '1325asdfasdasd',
   previous: '1423123123asfd'
},
{
   id: '1325asdfasdasd',
   next: '5345341fgdfgdd',
   previous: '545234123fsdfd'
},
{
   id: '5345341fgdfgdd',
   next: '1j3b12k3jbasdd',
   previous: '1325asdfasdasd'
},
{
   id: '1j3b12k3jbasdd',
   next: '89ad8sasds9d8s',
   previous: '5345341fgdfgdd'
},
{    id: '89ad8sasds9d8s', previous: '1j3b12k3jbasdd' }
]