重复执行:for 与 while

循环会重复执行某个操作:遍历某位客户的所有发票并求和、每月创建一行、检查表中的每条记录……

for 循环可用于执行代码和/或返回一个值数组。返回数组的类型取决于 do 与 end 之间最后一条语句的类型。

for 循环

循环遍历一段数字区间:

Ninox
for i from 1 to 10 do
    i;
end;

遍历数组:

Ninox
var myArray := [1, 3, 5, 7];
for i in myArray do
    i;
end;

遍历 JSON 对象的键与值:

Ninox
var config := {
    sep: ",",
    qut: """",
    lf: "%0D%0A",
    numberFormat: "point",
    dateFormat: "locale",
    header: true,
    sepHeader: false,
    encoding: "utf8"
};

for key, value in config do
    key + " = " + value;
end;

关于如何在 Ninox 中操作 JSON 变量,请参见:处理 JSON 数据。

对记录也同样可以这么做,但需要借助 Ninext 的原生 JS 把记录(nid)转换成 JSON:

Ninox
var rec := (first(select Customer));

"Transforming a record into a JSON object";
var config := #{:any return rec}#;

for fieldName, value in config do
    fieldName + " = " + value;
end;

这种做法在把表的所有字段导出为 CSV 之类的格式时会很有用。有两点需要注意:

  • 除了以标签表示的字段之外,得到的对象还包含技术性键 Id、ID、id 和 _node,并且其中的值是原始值(例如日期在其中是毫秒数)。导出时请排除这些键。
  • #{ … }# 代码块只在加载了 Ninext 的浏览器中执行:在 do as server 或表触发器(创建后、修改后)中,它不会产生任何效果。Ninext 的错误标签页会将其标出。

while 循环

While 循环很简单,不返回任何值。它们只用于执行重复性的任务,不能用来构建数组。

示例:

Ninox
var a := 1;
while a < 10 do
    a := a + 1;
end;