接口的Node.js数组未正确填充
我试图将4个文件读入一个对象数组。但是,数组中的对象值都是最后一个对象。我想知道我对这种行为做了什么错事 代码(代码已简化,因此可能没有什么意义): 日志中的结果:接口的Node.js数组未正确填充,node.js,typescript,Node.js,Typescript,我试图将4个文件读入一个对象数组。但是,数组中的对象值都是最后一个对象。我想知道我对这种行为做了什么错事 代码(代码已简化,因此可能没有什么意义): 日志中的结果: Reading file: /Users/autorun/Documents/Projects/Axway/Projects/axDeploy/data/rtczip/PD_only/PD.DEVOPS.TEST.1.FS.json Setting up axObj [1] Data file is valid with size:
Reading file: /Users/autorun/Documents/Projects/Axway/Projects/axDeploy/data/rtczip/PD_only/PD.DEVOPS.TEST.1.FS.json
Setting up axObj [1]
Data file is valid with size: [754] file: [PD.DEVOPS.TEST.1.FS.json]
Reading file: /Users/autorun/Documents/Projects/Axway/Projects/axDeploy/data/rtczip/PD_only/PD.DEVOPS.TEST.1.SFTP.json
Setting up axObj [2]
Data file is valid with size: [1625] file: [PD.DEVOPS.TEST.1.SFTP.json]
Reading file: /Users/autorun/Documents/Projects/Axway/Projects/axDeploy/data/rtczip/PD_only/PD.DEVOPS.TEST.1.json
Setting up axObj [3]
Data file is valid with size: [1507] file: [PD.DEVOPS.TEST.1.json]
Reading file: /Users/autorun/Documents/Projects/Axway/Projects/axDeploy/data/rtczip/PD_only/PD.DEVOPS.TEST.1_AS2.json
Setting up axObj [4]
Data file is valid with size: [874] file: [PD.DEVOPS.TEST.1_AS2.json]
Checking pdObjArray Content
axSeqCall index: [1] name: [PD.DEVOPS.TEST.1_AS2.json]
axSeqCall index: [2] name: [PD.DEVOPS.TEST.1_AS2.json]
axSeqCall index: [3] name: [PD.DEVOPS.TEST.1_AS2.json]
axSeqCall index: [4] name: [PD.DEVOPS.TEST.1_AS2.json]
问题:
在“检查PDOBjarary内容”中,我不希望所有的文件名都是[PD.DEVOPS.TEST.1.AS2.json],我希望所有4个不同的文件名,比如“PD.DEVOPS.TEST.1.FS.json”、“PD.DEVOPS.TEST.1.SFTP.json”、“PD.DEVOPS.TEST.1.json”、“PD.DEVOPS.TEST.1.json”、“PD.DEVOPS.TEST.1_AS2.json”
请帮忙
for (var file of files) {
var pdObj: axObj = {
id: "",
name: "PD.Object",
body: ""
};
...
}
请在for
循环中声明变量pdObj
为什么?:如果
pdObj
外部for
循环
pdObj = ...
pdObjArray.push(pdObj);
上述代码表示:将相同的参考变量pdOjb
附加到pdObjArray
因此,
pdObjArray
包含相同的引用数组这意味着仅显示最后一个值 但是,如果
pdObj
内部for
循环,则每个for循环
都会创建pdObj
,因此,不同的引用对象会附加到pdObjArray
或者您可以在PDOBJARRY.push(pdObj)之前使用对象克隆;
pdObjArray.push(JSON.parese(JSON.stringfy(pdObj));
请在
for
循环中声明变量pdObj
为什么?:如果
pdObj
外部for
循环
pdObj = ...
pdObjArray.push(pdObj);
上述代码表示:将相同的参考变量pdOjb
附加到pdObjArray
因此,
pdObjArray
包含相同的引用数组这意味着仅显示最后一个值 但是,如果
pdObj
内部for
循环,则每个for循环
都会创建pdObj
,因此,不同的引用对象会附加到pdObjArray
或者您可以在PDOBJARRY.push(pdObj)之前使用对象克隆;
pdObjArray.push(JSON.parese(JSON.stringfy(pdObj));
用于(文件的常量文件)
或用于(文件的let文件)
如果必须在异步调用中访问文件
,则不能在for
循环中使用var
关键字。它不会捕获文件
的确切值
请尝试更改dojobseqcall
函数中第一个for
循环中的var
,然后重试。for(const file of files)
或for(let file of files)
如果必须在异步调用中访问文件
,则不能在for
循环中使用var
关键字。它不会捕获文件
的确切值
请尝试更改
dojobseqcall
函数中第一个for
循环中的var
,然后重试。由于文件
是字符串数组,您可以尝试执行foreach
,然后执行其中的所有逻辑。
files.forEach(文件=>{
//这里的逻辑
})
查看Mozilla网站上的示例
由于
文件
是一个字符串数组,您可以尝试执行foreach
,然后执行其中的所有逻辑。
files.forEach(文件=>{
//这里的逻辑
})
查看Mozilla网站上的示例
谢谢King。在我将var pdObj移到for循环内后,代码就可以工作了。请您解释一下DFFIRENCE,以及如果我将var声明在for循环外,它为什么不工作?感谢您的帮助。非常感谢King。谢谢King。在我将var pdObj移到for循环内后,代码就可以工作了。请您解释一下DFFIRENCE和如果我在for循环外声明var为什么不起作用?感谢您的帮助。非常感谢King。谢谢Rannie。在for循环中将“var”更改为“let”后,即for(let file of files),它就起作用了。请您详细说明为什么“var”不起作用?谢谢Rannie。在for循环中将“var”更改为“let”后,即for(让文件的文件),它是有效的。你能详细说明为什么“var”不起作用吗?如果你在使用Typescript,我强烈建议你开始使用
let
和const
并避免var
。如果你在使用Typescript,我强烈建议你开始使用let
和const
并避免var
。