嵌套的 for 循环将不起作用。句法?

Posted

技术标签:

【中文标题】嵌套的 for 循环将不起作用。句法?【英文标题】:Nested for loop will not work. Syntax? 【发布时间】:2018-04-23 21:53:50 【问题描述】:

为什么这段代码不起作用?第二个循环中的 console.log 不会触发。

this.afDatabase.list(`data/users/$this.currentUserID/visits/`, ref => ref.orderByChild('type').equalTo('study')).snapshotChanges().map(changes => 
  return changes.map(c => ( key: c.payload.key, ...c.payload.val() ));)
  .take(1).subscribe(data => 


  let studys1 = [];
  let studys2 = [];

  for (let i=0; i < data.length; i++) 
    studys1.push(data[i]);

    for(let j=0; j < data[i].length; j++) 
      console.log(data[i][j]); //This not fires. I see nothing in the console
      studys2.push(data[i][j]) // Neither...
    
  

  console.log('Parent Length: ' + studys1.length); // Works
  console.log('Child Length: ' + studys2.length); //Always 0

);

我要获取的数据:

console.log('%O',data) 给出以下输出:

有什么想法吗?

【问题讨论】:

console.log('%O',data) 将有助于提供 data 的外观。 我使用您需要的 console.log 数据编辑了我的帖子。 :) 数据项不是数组,它们是对象。您可以迭代一个对象,但它与数组迭代不同。只需搜索 typescript 对象迭代。 您是否要将age country date 等的值推送到studys2 中? Object.keys(obj) 可能会有所帮助。 不,我需要计算子对象。所以在上面的例子中,console.log('studys2.length') 的结果必须是 1.. 【参考方案1】:

迭代对象与迭代数组不同,您可以使用for-in 来迭代对象:

for(var i in data)
  for(var j in data[i])
    console.log(data[i][j]);
    studys2.push(data[i][j]);
  ;
;

希望这会有所帮助。

【讨论】:

谢谢,这是一个进步。但我不需要来自对象子对象的所有数据。我只需要计算对象孩子自己。所以在上面的例子中console.log('studys2.length')的结果必须是1... @eleinad 不知道我是否做对了。您只想要第一个子键中的内容吗?在你的情况下-KyaYm...中的内容? 不是内容,只是数量。说明:我需要知道以“学习”为类型的所有条目的计数。我有父条目和子条目。所以我需要所有的计数来建立总和。就是这样:-) 所以你有一个数组中的对象,并且想要获取具有 type = "study" 的对象的数量,我猜对了吗?

以上是关于嵌套的 for 循环将不起作用。句法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 p 标签的嵌套 v-for 循环在 Vue.js 中不起作用

JavaScript:嵌套For循环不起作用

存在嵌套片段时 setRetainInstance(true) 将不起作用

对于下一个循环来计算运行总计将不起作用

为啥嵌套循环在 laravel 中不起作用

更新记录集的嵌套循环不起作用 Access