Javascript 尝试循环Firebase结果集时,forEach不是函数:
我正在尝试将我的一些Firebase数据库调用移植到一个IOT板,该板没有jQuery,只有很好的旧JavaScript 在我的代码中,我最初有一个jQueryJavascript 尝试循环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
$
…循环以迭代我的结果
我已将此转换为:
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)
:)