分类
标签
AI AionUi AI工作台 AI模型交互 Android CSS DevOps Dioxus Docker Docker Swarm ECS Electron Flutter Frontend Go Grok Hono HonoX HTML5 IoT IPC通信 IPFS Islands 架构 JavaScript JAX K3s Kamal Kubernetes n8n Pagefind React React Native Reactive Rust SaaS Serverless SQLite Tauri TF-IDF Transformer Twitter TypeScript UI Framework Vue Wails Web API WebAssembly WebSocket Web应用 Web服务器 Web框架 不可变数据 云原生 代码重构 信息流 倒排索引 全文检索 全栈框架 最佳实践 分布式 前端优化 动画 博客 后端 图片 存储 定时器 容器化 容器编排 小程序 工作流 工具 工具开发 工程化 并发 开发工具 异步 微服务 快速开发 思考 性能优化 技术选型 推荐系统 搜索引擎 效率 数据可视化 数据处理 数据流转 数据结构 无障碍服务 机器学习 架构 架构设计 框架 模板 流式处理 深度学习 游戏开发 状态管理 用户体验 看板 移动端 算法 组件 缓存 编译器 自动化 设计模式 负载均衡 跨平台 跨平台开发 路由 边缘计算 运维 部署 重构 集群管理 静态网站
377 字
2 分钟
确保从列表中获取可用值
对于很多项目来说,某些配置项或查询条件是必需的。当用户丢失配置数据或项目下线配置项,都会导致项目发生错误而造成不可用的问题,这时候,开发需要提供一些兜底策略,如当前列表数据查询不到时默认使用第一项。
ensure-get-list-val
这些东西每次都写一下又很麻烦,所以这里进行了一次封装,代码如下:
interface EnsureGetValFromListParams<ItemType, ValueType> {
/** 列表数据 **/
items: ItemType[]
value?: ValueType | undefined
/** 列表中数据值的提取方法 **/
getVal?: (item: ItemType) => ValueType
/** 查询不到数据时候返回值的位置 **/
pos?: 'frist' | 'last'
}
// ValueType = ItemType
// 如果不提供 ValueType, 则 ValueType 默认为 ItemType
const ensureGetValFromList = <ItemType, ValueType = ItemType>({
items,
value,
getVal = item => item as unknown as ValueType,
pos = 'frist'
}: EnsureGetValFromListParams<ItemType, ValueType>): ValueType | null => {
// 当前不是数组直接返回 null
if (!Array.isArray(items)) {
return null
}
const count = items.length
// 当前为空数组直接返回 null
if (count === 0) {
return null;
}
// 没有传递数值或者当前列表长度为1,直接返回列表唯一数据
if (!value || count === 1) {
return getVal(items[0])
}
// 查询列表,是否有数值等于传入数值
if (items.some(item => getVal(item) === value)) {
return value
}
// 返回列表第一条还是最后一条数据
const index = pos === 'frist' ? 0 : count - 1
return getVal(items[index])
}代码在 ensure-get-list-val 中。也可以使用 npm 等工具进行安装和使用。