如何将动态变量映射到对象数组?Sequelize Crypto模型DB数据动态映射咨询
实现方案
可以通过动态属性访问+可扩展映射表的方式实现,不需要提前硬编码动态变量的所有可能取值,具体实现如下:
- 第一步:定义动态变量到
Crypto模型属性的映射表,后续新增交易对仅需更新该表即可
// key为动态变量的取值,value为Crypto模型中对应的属性名,可按需扩展 const cryptoMapping: Record<string, keyof IDBCryptoAttributes> = { 'BTC': 'BTCUSD', 'ETH': 'ETHUSD', 'LTC': 'LTCUSD' }
- 第二步:封装通用映射方法
function getMappedValue(cryptoInstance: Crypto, dynamicVar: string): string | undefined { // 统一转大写避免大小写匹配问题 const formattedVar = dynamicVar.toUpperCase() const targetProp = cryptoMapping[formattedVar] if (!targetProp) return undefined // 动态访问实例属性返回对应值 return cryptoInstance[targetProp] as string }
- 第三步:使用示例
// 从数据库查询Crypto实例 const cryptoData = await Crypto.findByPk(1) // 传入动态变量(可来自用户输入、接口参数等任意动态来源) const targetValue = getMappedValue(cryptoData, 'btc')
如果需要支持无感知新增交易对,也可以直接通过字符串拼接属性名的方式实现,无需维护映射表:
function getMappedValue(cryptoInstance: Crypto, dynamicVar: string): string | undefined { const targetProp = `${dynamicVar.toUpperCase()}USD` as keyof IDBCryptoAttributes return cryptoInstance[targetProp] as string ?? undefined }
内容的提问来源于stack exchange,提问作者user16657995
相关产品推荐
相关产品推荐

