Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试循环Firebase结果集时,forEach不是函数:_Javascript_Firebase Realtime Database - Fatal编程技术网

Javascript 尝试循环Firebase结果集时,forEach不是函数:

Javascript 尝试循环Firebase结果集时,forEach不是函数:,javascript,firebase-realtime-database,Javascript,Firebase Realtime Database,我正在尝试将我的一些Firebase数据库调用移植到一个IOT板,该板没有jQuery,只有很好的旧JavaScript 在我的代码中,我最初有一个jQuery$ …循环以迭代我的结果 我已将此转换为: var tripsRef; tripsRef = firebase.database().ref('trips/'); tripsRef.orderByChild('timestamp').limitToLast(100).on('value', function (response) { va

我正在尝试将我的一些Firebase数据库调用移植到一个IOT板,该板没有jQuery,只有很好的旧JavaScript

在我的代码中,我最初有一个jQuery
$
…循环以迭代我的结果

我已将此转换为:

var tripsRef;
tripsRef = firebase.database().ref('trips/');
tripsRef.orderByChild('timestamp').limitToLast(100).on('value', function (response) {
var tripData = response.val();
tripData.forEach(function (index, element) {
    if (element.status >= 0) {
        var trip = new Object();
        trip.id = index;
        trip.launch = element.launch;
        trip.status = element.status;
    }
});
…但是,我得到了以下错误:

forEach不是一个函数

我不知道如何解决这个问题

for(let index in tripData){
  element = trimpData[index];
}
不是真的foreach,但工作方式与之完全相同


但是您也可以使用map函数

Array.of(response.val())。如果只是一个类似数组的对象缺少迭代器,那么forEach应该可以工作

您应该真正弄清楚您的响应是数组还是对象。
$。each()
迭代数组和对象,这就是它工作的原因

如果您真的想在该对象上迭代,则应该在
语句中使用“
for…”

for(let prop in tripData)
{ 
   if (tripData.hasOwnProperty(index))
   { 
     item = tripData[prop];
      // do stuff
    }
}

在这里的
语句中了解:

虽然@TypedSource的答案将迭代生成的子项,但它的迭代顺序尚未确定,而且很可能不是通过时间戳

作为查询结果获得的快照包含每个子项的三条信息:其键、值以及相对于其他子项的位置。在快照上调用
.val()
时,会丢失相对顺序

要维护订单,请使用快照的内置
forEach()
方法:

var tripsRef;
tripsRef = firebase.database().ref('trips/');
tripsRef.orderByChild('timestamp').limitToLast(100).on('value', function (response) {
  var index = 0;
  response.forEach(function (child) {
    var element = child.val();
    if (element.status >= 0) {
      var trip = new Object();
      trip.id = index;
      trip.launch = element.launch;
      trip.status = element.status;
    }
    index++;
  });
});

你确定吗?或多或少,是的:
函数a(){Array.of(arguments).forEach(a=>console.log(a))}未定义的a(1,23,4)VM2663:2[1,23,4,被调用方:函数,符号(Symbol.iterator):函数]
这将生成一个包含一个条目的数组
参数
而不是数组参数。在控制台中粘贴您的代码。它只打印一个条目,并且emntry是一个类似于数组的object.nope。请参阅我发布的带有第一条注释的块中的输出。这是来自控制台的。
参数
中有一个包含每个条目的数组,如下所示数组中一个单独的位置。那么,如果这样做,为什么会得到相同的结果:
函数a(){console.log(arguments)}
然后
a(1,23,4)
:)