Node.js动态参数传递:如何将函数计算价格匹配到对应ID?
动态处理多组ID与Price的解决方案
嘿,我来帮你搞定这个问题!你的核心需求是避免硬编码if-else、动态处理多组ID/Price,并且确保价格能准确赋值到对应的变量,对吧?咱们一步步拆解优化:
先说说原代码的核心问题
你当前用t1ID/t1Price这种独立变量的方式有两个致命问题:
- 扩展性极差:每加一组就要新增变量,还要加对应的if-else分支,代码会越来越臃肿
- 赋值无效:JS里基本类型(比如数字)是传值传递,你在
boughtPrice里给tradeBoughtPrice赋值,只是修改了函数内部的局部变量,完全影响不到外面的t1Price
最优解决方案:用集合存储交易项
把每组ID和Price包装成对象,放进数组里统一管理。这样既不用写一堆if-else,还能通过对象引用实现准确赋值,扩展性直接拉满。
步骤1:初始化交易列表
不用单独定义一堆变量,直接用数组存储所有交易项:
// 初始化3组交易,想要加更多直接push就行 const trades = [ { id: 0, price: 0 }, { id: 0, price: 0 }, { id: 0, price: 0 } ];
步骤2:修改order处理逻辑
不用写嵌套的if-else,直接用数组方法找到第一个未设置ID的交易项:
order.then(function(value) { // 找到第一个还没设置ID的交易项 const emptyTrade = trades.find(trade => trade.id === 0); if (!emptyTrade) { console.log('IDs all full!'); return; } // 为这个交易项赋值ID emptyTrade.id = value.result.id[0]; // 调用函数获取并赋值价格 fetchAndAssignPrice(emptyTrade); });
步骤3:编写价格获取函数
因为是异步操作(api call是Promise),我们可以用async/await让代码更清晰,同时通过对象引用直接修改交易项的price属性:
async function fetchAndAssignPrice(trade) { try { // 调用API获取价格(假设apiCall返回Promise) const idInfo = await apiCall({ ID: trade.id }); // 直接修改传入的交易对象的price属性,外部数组里的对应项会同步更新 trade.price = idInfo.result.tradeID.price; console.log(`交易ID ${trade.id} 的价格已更新为:${trade.price}`); } catch (error) { console.error(`获取交易ID ${trade.id} 价格失败:`, error); } } // 如果不习惯async/await,用Promise链式调用也可以: function fetchAndAssignPrice(trade) { return apiCall({ ID: trade.id }) .then(value => { trade.price = value.result.tradeID.price; console.log(`交易ID ${trade.id} 的价格已更新为:${trade.price}`); }) .catch(error => { console.error(`获取交易ID ${trade.id} 价格失败:`, error); }); }
无限扩展的方案
如果想要支持任意数量的交易组,完全不用修改核心逻辑,只需要动态往数组里加新的交易项就行:
// 新增一组交易的函数 function addNewTrade() { trades.push({ id: 0, price: 0 }); } // 想要加多少组就调用多少次 addNewTrade(); // 新增第4组 addNewTrade(); // 新增第5组
这样不管你有10组还是100组,代码逻辑都不用变,完美解决扩展性问题。
内容的提问来源于stack exchange,提问作者Alteredorange
相关产品推荐
相关产品推荐

