我得到这样的原始数据
SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;
Run Code Online (Sandbox Code Playgroud)
我想把它作为一个键值对。所以,首先我;像这样分隔数据
data.split(';');
Run Code Online (Sandbox Code Playgroud)
输出
[ 'SECRET_TOKEN=Iwillruletheworld',
'SECRET_REFRESH_TOKEN=Iwillruletheworld',
'SERVER_PORT=3000',
'SERVER_WS_PORT=4000',
'NODE_URI=http://test.abc.com/#/',
'MONGODB_DEFAULT_URI=mongodb',
'MONGODB_HOST=localhost',
'MONGODB_PORT=27017'
]
Run Code Online (Sandbox Code Playgroud)
现在我想把它作为键值对
预期产出
[ 'SECRET_TOKEN'='Iwillruletheworld',
'SECRET_REFRESH_TOKEN'='Iwillruletheworld',
'SERVER_PORT'='3000',
'SERVER_WS_PORT'='4000',
'NODE_URI'='http://test.abc.com/#/',
'MONGODB_DEFAULT_URI'='mongodb',
'MONGODB_HOST'='localhost',
'MONGODB_PORT'='27017'
]
Run Code Online (Sandbox Code Playgroud)
我想'在=发生的任何地方插入。任何人都可以帮助我。
假设您想要一个对象作为结果(因为您提供的输出实际上是无效的),您可以通过拆分;、删除空项目 ( .filter(Boolean)) 并reduce构建一个键值对对象。
当然,这个例子假设输入中没有重复的键。
let input = `SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;`;
let res = input.split(';').filter(Boolean).reduce((acc, next) => {
let [key, value] = next.split('=');
acc[key] = value;
return acc;
}, {});
console.log(res);Run Code Online (Sandbox Code Playgroud)
编辑(2021 年):另一个更“现代”的解决方案也可以Object.fromEntries代替.reduce. 结果完全一样,只是另一种类似的方法。
let input = `SECRET_TOKEN=Iwillruletheworld;SECRET_REFRESH_TOKEN=Iwillruletheworld;SERVER_PORT=3000;SERVER_WS_PORT=4000;NODE_URI=http://test.abc.com/#/;MONGODB_DEFAULT_URI=mongodb;MONGODB_HOST=localhost;MONGODB_PORT=27017;`;
const mapEntries = Object.fromEntries(
input.split(';').filter(Boolean).map(v => v.split('='))
);
console.log(mapEntries);Run Code Online (Sandbox Code Playgroud)