フィールドコードを取得する方法

いつもお世話になっております。

サブテーブルの入力内容を下記のようにフィールドコードで取得しているのですが、フィールドコードが多い場合にコードの入力が面倒に感じております。

サブテーブルで使用しているフィールドコード名を簡単に取得できればと思ったのですが、方法はありますでしょうか。

 data[i][0] = record.テーブル.value[i].value.フィールドコード.value;
let fieldColumns = Object.keys(record['テーブル'].value[0]?.value || {});

こちらでサブテーブルのフィールドが配列で取得できます。1行目の連想配列を取得する形になっているので、1行目が存在しない状態だと取得できません(サブテーブルを含まないcsvインポートや、後からフォーム設定で追加したサブテーブルは0行のデータになっているので、そのままdetail.showイベントで使用すると取得できません)。

もしくはforループで都度サブテーブルのフィールドコードから書いていくのが手間ということでしょうか?それであればforEachを使用すれば

record['テーブル'].value.forEach((row, index) => {
  data[index][0] = row.value['フィールドコード'].value; // このrowはforループの「record['テーブル'].value[i]」と同じ意味で、indexは配列のインデックス番号です
});

こんな感じで使用できます。

mls-hashimoto様コメントいただきましてありがとうございます。

説明不足で大変申し訳ございません。

前後のコードを省略しておりましたが、実際にはforループでコードを書いておりました。

例えば、テーブルが10列ある場合は下記のようにコードを書いており、フィールドコードが変更となった場合や他のアプリで流用する場合にフィールドコードを修正したりするのが面倒に思っておりました。

      for (let i = 0; i < tablerow; i++) {
        data[i][0] = record.テーブル.value[i].value.フィールドコード1.value;
        data[i][1] = record.テーブル.value[i].value.フィールドコード2.value;
        data[i][2] = record.テーブル.value[i].value.フィールドコード3.value;
        data[i][3] = record.テーブル.value[i].value.フィールドコード4.value;
        data[i][4] = record.テーブル.value[i].value.フィールドコード5.value;
        data[i][5] = record.テーブル.value[i].value.フィールドコード6.value;
        data[i][6] = record.テーブル.value[i].value.フィールドコード7.value;
        data[i][7] = record.テーブル.value[i].value.フィールドコード8.value;
        data[i][8] = record.テーブル.value[i].value.フィールドコード9.value;
    data[i][9] = record.テーブル.value[i].value.フィールドコード10.value;
    }     

もし下記のようにフィールドコードを取得できれば、テーブルの全データを簡単に取得できると思い質問させていただきました。

//フィールドコード名を取得
for (let i = 0; i < tablerow; i++) {
fieldcode[i] = record.テーブル.value[i].フィールドコード名;
}

//テーブルデータを多次元配列に入れる
for (let i = 0; i < tablerow; i++) {
for (let j = 0; j < fieldcode.length; j++) {
  data[i][j] = record.テーブル.value[i].value.fieldcode[j].value;
}
}

konno さま

それであれば、私が記載した内容で問題ないかと思います。勘違いがあったら申し訳ありません。

let data = [];
let fieldColumns = Object.keys(record['テーブル'].value[0]?.value || {});

record['テーブル'].value.forEach((row, index) => {
    data[index] = [];

    fieldColumns.forEach((fieldCode, fieldIndex) => {
        data[index][fieldIndex] = row.value[fieldCode].value;
    });
});

console.log(data);

mls-hashimoto様、コメントいただきありがとうございました。

教えていただいたコードで解決できました。

 

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。