/** * 排序工具函数 * 纯函数,无 wx.* 依赖,可在 Node.js 测试环境中使用 */ /** * 按时间戳字段降序排序(最新在前) * @param list 带时间戳字段的对象数组 * @param field 时间戳字段名,默认 'timestamp' * @returns 排序后的新数组(不修改原数组) */ export function sortByTimestamp>( list: T[], field: string = 'timestamp' ): T[] { return [...list].sort((a, b) => { const ta = new Date(a[field]).getTime() const tb = new Date(b[field]).getTime() // NaN 排到末尾 if (isNaN(ta) && isNaN(tb)) return 0 if (isNaN(ta)) return 1 if (isNaN(tb)) return -1 return tb - ta }) } /** * 按指定字段排序 * @param list 对象数组 * @param field 排序字段名 * @param order 排序方向,'asc' 升序 / 'desc' 降序(默认 'desc') * @returns 排序后的新数组 */ export function sortByField>( list: T[], field: string, order: 'asc' | 'desc' = 'desc' ): T[] { return [...list].sort((a, b) => { const va = a[field] const vb = b[field] let cmp: number if (typeof va === 'number' && typeof vb === 'number') { cmp = va - vb } else { cmp = String(va ?? '').localeCompare(String(vb ?? '')) } return order === 'asc' ? cmp : -cmp }) }