0

我目前正在尝试通过脚本迭代事件处理中的 ManagedObjects 列表。它应该检查ManagedObject列表中每个条件的条件,一旦为真,就返回该对象。

这是我的脚本:

 create expression ManagedObject getCurrentDepot(position, listObjects) [ 
     for (i = 0; i <= listObjects.length; i++) { 
         var obj = listObjects[i]; 
         var distance = distance(position.lat, position.lng, obj.Geofence.lat, obj.Geofence.lng); 
         if (distance <= obj.radius ) { 
             depot; 
         } 
     } 
     null; 
 ];

我收到以下错误:

语句 mytest:statement_2 中的错误!: ';' 附近的语法不正确 在第 3 行第 26 列

它抱怨这条线:

var obj = listObjects[i];

如何正确迭代列表?

4

2 回答 2

1

最好的解决方案是不在表达式中进行循环,而是在事件处理本身中进行。

create expression Boolean isInRange(position, element) [
     var distance = distance(position.lat, position.lng, element.Geofence.lat, obj.Geofence.lng); 
     if (distance <= element.radius ) { 
         true; 
     }
     false;
 ];

insert into MyStreamWithDepot
select
    event.listObjects.firstOf(element => isInRange(event.position, element) is true) as currentDepot
from InputEvent event;

您可以在此处查看“firstOf”方法的文档 esper文档

于 2015-10-13T08:19:49.370 回答
0

尝试

var distance;
listObjects.forEach(function(obj) {          
        distance  = distance(position.lat, position.lng, obj.Geofence.lat, obj.Geofence.lng); 
         if (distance <= obj.radius ) { 
             depot; 
         } 
     }); 
于 2015-10-12T11:56:32.673 回答