我正在尝试将环境变量转换为值对象以在 JavaScript 中进行配置,但我不知道实现此目的的最佳方法。
想法是将 SAMPLE_ENV_VAR=value
输出为:
{
sample: {
env: {
var: value
}
}
}
我目前拥有的:
const _ = require('lodash');
const process = require('process');
_.each(process.env, (value, key) => {
key = key.toLowerCase().split('_');
// Convert to object here
}
最佳答案
这是一个基于您的更完整的解决方案:
const _ = require('lodash');
const result = {};
// We'll take the following as an example:
// process.env = { HELLO_WORLD_HI: 5 }
// We'll expect the following output:
// result = { hello: { world: { hi: 5 } } }
_.each(process.env, (value, key) => {
// We'll separate each key every underscore.
// In simple terms, this will turn:
// "HELLLO_WORLD_HI" -> ['HELLO', 'WORLD', 'HI']
const keys = key.toLowerCase().split('_');
// We'll start on the top-level object
let current = result;
// We'll assign here the current "key" we're iterating on
// It will have the values:
// 'hello' (1st loop), 'world' (2nd), and 'hi' (last)
let currentKey;
// We'll iterate on every key. Moreover, we'll
// remove every key (starting from the first one: 'HELLO')
// and assign the removed key as our "currentKey".
// currentKey = 'hello', keys = ['world', 'hi']
// currentKey = 'world', keys = ['hi'], and so on..
while ( (currentKey = keys.shift()) ) {
// If we still have any keys to nest,
if ( keys.length ) {
// We'll assign that object property with an object value
// result =// { HELLO: {} }
current[currentKey] = {};
// And then move inside that object so
// could nest for the next loop
// 1st loop: { HELLO: { /*We're here*/ } }
// 2nd loop: { HELLO: { WORLD: { /*We're here*/ } } }
// 3rd loop: { HELLO: { WORLD: { HI : { /*We're here*/ } } } }
current = current[currentKey];
} else {
// Lastly, when we no longer have any key to nest
// e.g., we're past the third loop in our example
current[currentKey] = process.env[key]
}
}
});
console.log(result);
简单来说:
- 我们将遍历每个环境变量(
来自 process.env
) - 用下划线分隔键名,然后再次循环每个键 (
['HELLO', 'WORLD', 'HI']
) - 将其分配给一个对象 (
{ hello: {} }
->{ hello: { world: {} } }
->{ hello: world : { hi: ? } }
) - 当我们不再剩下任何键时,将其分配给实际值 (
{ hello: { world: { hi: 5 } } }
)
关于javascript - 如何将环境变量转换为 JS 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213935/