Javascript 为什么我不能循环使用字典/键数组
更新:我尝试这样记录:@Kobe建议的console.logJSON.stringifythis.idTitleDict。这显示了空的花括号…所有关于这个字典声明的代码,填充在下面。我首先调用this.getTemplates来填充字典,然后下一行我要迭代它。在将dict传递给JSON.stringify之后,当我将它记录到控制台时,它似乎是空的 在我的angular应用程序中的一个组件的ngOnInit方法中,我在字典上循环以获取第一个键,然后打破循环。但它似乎没有被重复 字典如下所示:Javascript 为什么我不能循环使用字典/键数组,javascript,angular,typescript,for-loop,Javascript,Angular,Typescript,For Loop,更新:我尝试这样记录:@Kobe建议的console.logJSON.stringifythis.idTitleDict。这显示了空的花括号…所有关于这个字典声明的代码,填充在下面。我首先调用this.getTemplates来填充字典,然后下一行我要迭代它。在将dict传递给JSON.stringify之后,当我将它记录到控制台时,它似乎是空的 在我的angular应用程序中的一个组件的ngOnInit方法中,我在字典上循环以获取第一个键,然后打破循环。但它似乎没有被重复 字典如下所示: {
{
1: "title",
2: "title",
3: "title",
4: "title",
5: "title",
6: "title"
}
我试过:
const keys=Object.keysthis.idTitleDict;
对于常量键输入键{
如果this.idTitleDict.haownPropertyKey{
console.logkey;
这个.showContentkey;
打破
}
}
此外:
对于此.idTitleDict中的常量键{
如果this.idTitleDict.haownPropertyKey{
console.logkey;
这个.showContentkey;
打破
}
}
此外:
对于Object.keysthis.idTitleDict中的常量键{
如果this.idTitleDict.haownPropertyKey{
console.logkey;
这个.showContentkey;
打破
}
}
控制台中未记录任何get,并且不会执行this.showContent。我查过之后就知道字典里有人。在另一个函数中,我在另一个字典上循环,没有问题:
获得模板{
this.apiService.getTemplates.subscribe
数据:any=>{
用于常量键输入数据{
如果data.hasOwnPropertykey{
this.idTitleDict[key]=数据[key].title;
}
}
}
;
}
完整的Ngonit方法:
恩戈尼特{
这是一个模板;
const keys=Object.keysthis.idTitleDict;
console.logthis.idTitleDict;//这表明字典已填充,如本文顶部的字典所示
对于Object.keysthis.idTitleDict中的常量键{
如果this.idTitleDict.haownPropertyKey{
console.logkey;
这个.showContentkey;
打破
}
}
}
字典声明:
idTitleDict:{[id:string]:string;}={};
用以下方法填写:
获得模板{
this.apiService.getTemplates.subscribe
数据:any=>{
用于常量键输入数据{
如果data.hasOwnPropertykey{
this.idTitleDict[key]=数据[key].title;
}
}
}
;
}
我可能错过了一些东西,但我已经不知所措了。如果您只想调用第一个键的方法,为什么不简单地执行下面的操作呢
const keys = Object.keys(this.idTitleDict);
if(keys.length){
this.showContent(keys[0]);
}
如果您只想调用第一个键的方法,为什么不简单地执行下面的操作呢
const keys = Object.keys(this.idTitleDict);
if(keys.length){
this.showContent(keys[0]);
}
您可以使用Object.keys和[0]仅调用第一项上的showContent:
常量obj={'1':title1,'2':title2,'3':title3,'4':title4,'5':title5,'6':title6},
showContent=console.log
showContentObject.keysobj[0]您可以使用Object.keys和[0]仅对第一项调用showContent:
常量obj={'1':title1,'2':title2,'3':title3,'4':title4,'5':title5,'6':title6},
showContent=console.log
showContentObject.keysobj[0]由于Object.keys的返回类型是Array,您应该使用for..of循环,而不是for..in循环,在本例中,它返回索引数组,但不返回对象键
主要问题是this.getTemplates的行为异步从API获取数据始终是,而对象当时是空的,因此在更改时,使用字典应该移动到另一个生命周期挂钩。由于object.keys返回类型是数组,您应该使用for..of循环而不是for…in,在本例中,它返回索引数组,但不返回对象键
主要问题是this.getTemplates的行为异步从API获取数据始终是空的,而此时对象是空的,因此在更改后,可能应该将使用字典的操作移动到另一个生命周期挂钩。执行代码时,对象似乎没有数据。试试这个来确认一下
let self = this;
setTimeout(function(){
const keys = Object.keys(self.idTitleDict);
for (const key in keys) {
if (self.idTitleDict.hasOwnProperty(key)) {
console.log(key);
self.showContent(key);
break;
}
}
},1000);
当代码执行时,对象似乎没有数据。试试这个来确认一下
let self = this;
setTimeout(function(){
const keys = Object.keys(self.idTitleDict);
for (const key in keys) {
if (self.idTitleDict.hasOwnProperty(key)) {
console.log(key);
self.showContent(key);
break;
}
}
},1000);
您要迭代的列表在哪里?@Ntwobike我要迭代前3个代码块中显示的字典,我将更新显示如何查找字典的帖子keys数组在初始化后包含哪些内容?只是为了记录-如果for hasProperty是多余的,因为您已经在迭代现有的键了…而且,这个片段应该足够了:js Object.keyshis.idTitleDict.forEachthis.showContent@devnull69这是不正确的。您要迭代的列表在哪里?@Ntwobike我要迭代前3个代码块中显示的字典,我将更新显示如何查找字典的帖子。在初始化之后,keys数组包含哪些内容?只是为了记录一下——if for hasProperty是多余的,因为您已经在迭代现有的键了……而且,这个片段应该足够了:js
Object.keysthis.idTitleDict.forEachthis.showContent@devnull69不正确我需要第一个键而不是值这会返回一个未定义的对象。keysobj[0]当您记录对象时,请使用JSON.stringifyobj,以便chrome在记录对象时不会修改它。这意味着您的对象在记录对象时为空,因此,我们为什么会收到此错误。@keesjanbertus这是因为chrome试图对您有用并自动更新它。我需要的是第一个键,而不是值。这返回一个未定义的对象。keysobj[0]在记录对象时,请使用JSON.stringifyobj,这样chrome在记录时不会修改它。这意味着你的对象在记录对象时是空的,因此为什么会收到此错误。@keesjanbertus这是因为chrome试图对你有用并自动为你更新它。当我创建密钥数组时,它似乎没有被填充。即使字典明确显示,当我创建keys数组时,它不会被填充。即使字典确实是,但它返回未定义但它返回未定义等待,这实际上起作用了!请解释原因:我想补充的是,this.showContentkey;必须更改为self.showContentkey才能使其成为workobject当时没有数据…如何获取此对象?我从rest api获取数据。当我用你的代码替换我在ngOnInit中尝试的for循环时,字典中突然有了数据,这是怎么回事?这个关键字指的是当前对象,当你使用settimout时,它会取settimout这个。但这不是原因。等等,这确实奏效了!请解释原因:我想补充的是,this.showContentkey;必须更改为self.showContentkey才能使其成为workobject当时没有数据…如何获取此对象?我从rest api获取数据。当我用你的代码替换我在ngOnInit中尝试的for循环时,字典中突然有了数据,这是怎么回事?这个关键字指的是当前对象,当你使用settimout时,它会取settimout这个。但这不是原因。