Javascript 为什么我不能循环使用字典/键数组

Javascript 为什么我不能循环使用字典/键数组,javascript,angular,typescript,for-loop,Javascript,Angular,Typescript,For Loop,更新:我尝试这样记录:@Kobe建议的console.logJSON.stringifythis.idTitleDict。这显示了空的花括号…所有关于这个字典声明的代码,填充在下面。我首先调用this.getTemplates来填充字典,然后下一行我要迭代它。在将dict传递给JSON.stringify之后,当我将它记录到控制台时,它似乎是空的 在我的angular应用程序中的一个组件的ngOnInit方法中,我在字典上循环以获取第一个键,然后打破循环。但它似乎没有被重复 字典如下所示: {

更新:我尝试这样记录:@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这个。但这不是原因。