重複執行: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;