我目前正在寻找一种通过JavaScript中的对象使用键和值创建JSON文件(versions.json)的方法。要创建JSON文件,请在此处创建该对象:
["V1_config-interfaces.json","V2_config-interfaces.json","V3_config-interfaces.json","versions.json"]
我现在需要以某种方式在此对象上循环,并检查当前文件是否不是versions.json
,因为这是已创建的文件。
JSON文件必须如下所示:
{
"V1": "V1_config-interfaces.json",
"V2": "V2_config-interfaces.json",
"V3": "V3_config-interfaces.json"
}
因此,密钥始终是下划线之前的版本号。我尝试过的是这里:
const fs = require('fs');
const interfaces = fs.readdirSync('./src/interfaces/');
fs.writeFile('./src/interfaces/versions.json', JSON.stringify(interfaces), (err) => {
if (err) throw err;
console.log('versions.js successfully created');
});
但这会产生与对象外观相同的结果。那我怎么能达到目标呢?
答案 0 :(得分:2)
使用Array#reduce和正则表达式。这会剥离文件版本,并将其作为键添加到您的对象,并忽略所有没有版本号的文件。它还会在紧随其后的版本中检查该版本是否具有_
字符。
const data = ["V1_config-interfaces.json","V2_config-interfaces.json","V3_config-interfaces.json","versions.json", "V4shouldntwork.json", "shouldntwork_V5_.json", "V123_shouldwork.json"];
const res = data.reduce((a,v)=>{
const version = v.match(/^V[1-9]+(?=_)/);
if(version === null) return a;
a[version.shift()] = v;
return a;
}, {});
console.log(res);