我正在尝试将我的一些Firebase数据库调用移植到没有jQuery的IOT板,只是很好的旧JavaScript。
在我的代码中,我最初有一个jQuery $.each(tripData, function(index, element)
...循环迭代我的结果。
我已将其切换为:
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不是函数
我不知道如何解决这个问题。
答案 0 :(得分:7)
for(let index in tripData){
element = trimpData[index];
}
不是真正的预告,但与它完全一样
但您也可以使用地图功能
答案 1 :(得分:4)
您应该确定您的响应是数组还是对象。
CREATE PROCEDURE dbo.sp_upgraddiagrams
AS
BEGIN
IF OBJECT_ID(N'dbo.sysdiagrams') IS NOT NULL
return 0;
CREATE TABLE dbo.sysdiagrams
(
name sysname NOT NULL,
principal_id int NOT NULL, -- we may change it to varbinary(85)
diagram_id int PRIMARY KEY IDENTITY,
version int,
definition varbinary(max)
CONSTRAINT UK_principal_name UNIQUE
(
principal_id,
name
)
);
-- Add this if we need to have some form of extended properties for diagrams */
IF OBJECT_ID(N'dbo.sysdiagram_properties') IS NULL
BEGIN
CREATE TABLE dbo.sysdiagram_properties
(
diagram_id int,
name sysname,
value varbinary(max) NOT NULL
)
END
IF OBJECT_ID(N'dbo.dtproperties') IS NOT NULL
begin
insert into dbo.sysdiagrams
(
[name],
[principal_id],
[version],
[definition]
)
select
convert(sysname, dgnm.[uvalue]),
DATABASE_PRINCIPAL_ID(N'dbo'), -- will change to the sid of sa
0, -- zero for old format, dgdef.[version],
dgdef.[lvalue]
from dbo.[dtproperties] dgnm
inner join dbo.[dtproperties] dggd on dggd.[property] = 'DtgSchemaGUID' and dggd.[objectid] = dgnm.[objectid]
inner join dbo.[dtproperties] dgdef on dgdef.[property] = 'DtgSchemaDATA' and dgdef.[objectid] = dgnm.[objectid]
where dgnm.[property] = 'DtgSchemaNAME' and dggd.[uvalue] like N'_EA3E6268-D998-11CE-9454-00AA00A3F36E_'
return 2;
end
return 1;
END
遍历数组和对象,这就是它工作的原因。
如果你真的想迭代这个对象$.each()
,你应该使用for...in
语句。
tripData
在此处了解for(let prop in tripData)
{
if (tripData.hasOwnProperty(index))
{
item = tripData[prop];
// do stuff
}
}
语句:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
答案 2 :(得分:2)
虽然@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++;
});
});
答案 3 :(得分:0)
{{1}}只是一个类似于数组的对象而缺少其迭代器
,它应该可以工作