我对for循环中的if语句有疑问。
我正在从目录spec.yaml
遍历文件列表,每个文件都从filesSAS
转换为csv
。之后,我检查输出是否在其对象中具有ID(如果是),复制文件JSON
(如果存在ID)添加日期并另存为CSV。
问题是,在第一次迭代中,它复制了文件,但它还在执行(copyFile(dirSas, dirOut, filename)
函数,该函数将覆盖我的结果。我要达到的目标是,如果不存在id复制文件,并且此迭代不进行另一个迭代。我试图将saveCSV放入for循环中而没有运气
编辑:当我的for循环命中没有ID的对象时,我想复制文件。当id出现时,我想添加日期并另存为csv
saveCSV
致谢
答案 0 :(得分:0)
您可以通过使用布尔值来实现您想要做的事情,如果找不到ID,我们会对其进行更新
const saveNewFile = async (filesSAS, dirSas, dirOut, dirArchive) => {
filesSAS.forEach(async (filename, index) => {
const newData = await csv().fromFile(`${dirSas.path}/${filename}`);
for await (const iterator of object) {
if (iterator.Id === null || iterator.Id === undefined) {
await copyFile(dirSas, dirOut, filename);
}
else {
rec.Date = moment(Date.now()).format("DD-MMM-YYYY");
await saveCSV(newData, `${dirOut.path}/${filename}`, "output");
}
}
});
};
答案 1 :(得分:0)
JavaScript确实具有continue
语句,该语句跳过了循环的一次迭代:
JavaScript Break and Continue
但是,我认为您的循环是异步的这一事实使得很难以顺序方式重新启动循环。您始终可以只使用if
语句来完成循环的其余部分。
答案 2 :(得分:0)
嘿,我想通过重构来实现
const saveNewFile = async (filesSAS, dirSas, dirOut, dirArchive) => {
filesSAS.forEach(async filename => {
const newData = await csv().fromFile(`${dirSas.path}/${filename}`);
if (!newData[0].hasOwnProperty(pkCol)) {
copyFile(dirSas, dirOut, filename);
} else {
for await (const rec of newData) {
rec.DateCreated = moment(Date.now()).format("DD-MMM-YYYY");
}
await saveCSV(newData, `${dirOut.path}/${filename}`, "output");
}
});
};