如何在JavaScript的map函数中使用外部参数生成动态对象键名?
在map函数中使用外部参数构建动态对象键名
你遇到的问题是对象字面量中动态键名的语法错误,正确做法是使用计算属性名(用方括号包裹表达式),就能生成ema200这类动态键名,而且外部函数的period参数在map回调中可正常访问(闭包特性)。
修正后的代码如下:
export async function EMA(candles: Candle[], period: number) { const input = candles.map((candle) => candle.close); const ema = await ta.indicators.ema.indicator([input], [period]); const diffLen = input.length - ema[0].length; const emptyArray = [...new Array(diffLen)].map((entry) => 0); const emaValues = [...emptyArray, ...ema[0]]; // 用方括号包裹动态键名表达式,模板字符串拼接更简洁 candles = candles.map((candle, i) => ({ ...candle, [`ema${period}`]: { value: emaValues[i], period: period }, })); return candles; }
关键说明:
- 计算属性名语法
[表达式]支持在对象字面量中动态生成键名,除了模板字符串ema${period},也可以用'ema' + period实现相同拼接效果。 - map的回调函数处于EMA函数的作用域内,无需额外处理即可直接访问外部的
period参数。
内容的提问来源于stack exchange,提问作者BitQueen
相关产品推荐
相关产品推荐

