如何在JavaScript中将多个.env环境变量提取为数组?
正确实现方法
你的代码问题在于访问process.env动态属性的语法错误,JS中访问对象的动态属性需要用方括号语法,而不是模板字符串拼接在点后面。下面提供两种可行方案:
方案一:已知账号数量时循环提取
适合明确知道API账号总数的场景(比如10个):
import dotenv from "dotenv" dotenv.config() const accountInfo = [] // 循环范围根据实际账号数量调整,比如10个就写i <= 10 for (let i = 1; i <= 10; i++) { const accountKey = `API_ACCOUNT_${i}` const secretKey = `API_SECRET_${i}` // 仅添加存在的有效账号信息 if (process.env[accountKey] && process.env[secretKey]) { accountInfo.push({ account: process.env[accountKey], secret: process.env[secretKey] }) } }
方案二:自动遍历所有账号(适合数量不确定的场景)
如果不确定具体账号数量,或者后续可能新增账号不想修改代码,可以通过遍历环境变量自动筛选:
import dotenv from "dotenv" dotenv.config() const accountInfo = [] // 遍历所有环境变量的键 Object.keys(process.env).forEach(key => { // 匹配以API_ACCOUNT_开头的键,提取序号 const matchResult = key.match(/^API_ACCOUNT_(\d+)$/) if (matchResult) { const index = matchResult[1] const secretKey = `API_SECRET_${index}` // 对应密钥存在时才添加 if (process.env[secretKey]) { accountInfo.push({ account: process.env[key], secret: process.env[secretKey] }) } } }) // 可选:按账号序号排序,保证顺序与.env文件一致 accountInfo.sort((a, b) => { const getIndex = item => { const accountKey = Object.keys(process.env).find(k => process.env[k] === item.account) return parseInt(accountKey.split('_')[2]) } return getIndex(a) - getIndex(b) })
关键说明
- 动态访问对象属性必须用
obj[动态键名]的形式,obj.后面只能跟固定的属性名,不能直接用模板字符串。 - 添加存在性判断可以避免将未定义的空值加入数组,保证数据有效性。
内容的提问来源于stack exchange,提问作者forbidden
相关产品推荐
相关产品推荐

