gpt4 book ai didi

javascript - 保留对象数据

转载 作者:行者123 更新时间:2023-12-02 22:10:08 25 4
gpt4 key购买 nike

我正在创建一个程序,用户可以在其中保存 session 之间的搜索词。如果用户保留了搜索项,则与该搜索项对应的数据也被保留。在每个 session 开始时,如果脚本不再对应于事件或连接的驱动器,则脚本会丢弃应保留的所有旧数据。

但是,我对使用 JSON 和此类对象不太熟悉,所以我想知道是否有比下面的方法更好的方法来实现此目的?具体来说,是否有一种方法比第一种方法更有效甚至更漂亮for of循环和重度嵌套if,for,for,if代码块?

async function guaranteeData(drives){
const
config = await readJson('./config.json'),
data = await readJson('./data.json')


// Is there a better way to write this code?

let
json = {}

for (const [drive] of drives) {
json[drive] = {}
}

// if tags have been preserved
if (config.fileTypes.length > 0) {
// loop thru all current system drives
for (const [drive] of drives) {
// loop thru all preserved tags
for (const fileType of config.fileTypes) {
// if current drive has current tag data
if (data[drive].hasOwnProperty(fileType)) {
// preserve this data: data[drive][fileType]
json[drive][fileType] = data[drive][fileType]
}
}
}
}

////////////////////////////////////////////


json = JSON.stringify(json, null, 2)
await fsp.writeFile('./data.json', json, {
flag: 'w',
encoding: 'utf8'
})
.then(() => {
return true
})
.catch(error => {
if (error.code === 'EEXIST') {
return false
} else {
throw error
}
})
}

最佳答案

我会改变其中两件事

  • 删除 if (config.fileTypes.length > 0) 检查,因为它将处理后面的 for 循环。

  • 删除 for 循环,该循环将 json[drive] 分配给 for 循环内嵌套 for 循环的空对象。这也将删除该 for 循环。

它看起来像这样

async function guaranteeData(drives) {
const config = await readJson("./config.json");
const data = await readJson("./data.json");

const json = {};

// if tags have been preserved
// loop thru all current system drives
for (const [drive] of drives) {
json[drive] = {};
// loop thru all preserved tags
for (const fileType of config.fileTypes) {
// if current drive has current tag data
if (data[drive].hasOwnProperty(fileType)) {
// preserve this data: data[drive][fileType]
json[drive][fileType] = data[drive][fileType];
}
}
}

////////////////////////////////////////////

json = JSON.stringify(json, null, 2);
await fsp
.writeFile("./data.json", json, {
flag: "w",
encoding: "utf8"
})
.then(() => {
return true;
})
.catch(error => {
if (error.code === "EEXIST") {
return false;
} else {
throw error;
}
});
}

关于javascript - 保留对象数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59586771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com