UNPKG

anitimejs

Version:

Thư viện xử lý chuỗi số và thời gian trong JavaScript/Typescript

65 lines (64 loc) 2.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sortArray = void 0; const sortArray = (array, options = {}) => { if (!array || !Array.isArray(array)) { return []; } const { key, order = "asc", deepKeys = [], customCompare, nullsPosition = 'last' } = options; // Hàm so sánh cơ bản với xử lý null/undefined const baseCompare = (a, b) => { // Xử lý giá trị null hoặc undefined if (a === undefined || a === null) { return nullsPosition === 'first' ? -1 : 1; } if (b === undefined || b === null) { return nullsPosition === 'first' ? 1 : -1; } // So sánh dựa trên kiểu dữ liệu if (typeof a === 'string' && typeof b === 'string') { return a.localeCompare(b); } if (a instanceof Date && b instanceof Date) { return a.getTime() - b.getTime(); } if (a === b) return 0; return a > b ? 1 : -1; }; // Hàm xử lý sắp xếp chính const sortFn = (a, b) => { // Sử dụng hàm so sánh tùy chỉnh nếu được cung cấp if (customCompare) { return order === "asc" ? customCompare(a, b) : customCompare(b, a); } const valueA = key ? a[key] : a; const valueB = key ? b[key] : b; let result = baseCompare(valueA, valueB); if (order === "desc") result *= -1; return result; }; // Tạo bản sao để tránh thay đổi mảng gốc và sắp xếp const sortedArray = [...array].sort(sortFn); // Xử lý các mảng con theo `deepKeys` if (deepKeys.length > 0) { for (const item of sortedArray) { for (const { deepKey, sortKey, order: deepOrder = "asc" } of deepKeys) { if (item && item[deepKey]) { if (Array.isArray(item[deepKey])) { // Xử lý đệ quy các mảng con, nhưng loại bỏ deepKeys để tránh vòng lặp vô hạn item[deepKey] = (0, exports.sortArray)(item[deepKey], { key: sortKey, order: deepOrder, nullsPosition, // Không truyền lại deepKeys để tránh xử lý đệ quy vô hạn }); } } } } } return sortedArray; }; exports.sortArray = sortArray;