同じレコード内の複数のサブテーブルを日付基準で並べ替える

同じレコード内の複数のサブテーブルを下記コードを応用して日付基準ですべて並べ替えようと思っているのですが、どの点を修正すればよいでしょうか。
ちなみにサブテーブルは4種類あります。

ご教示頂けますと幸いです。宜しくお願い致します。

【コード】

// 並べ替え更新機能
const sortTable = async () => {
if (!window.confirm(“テーブルを並べ替えますか?”)) return
try {

const res = await kintone.app.record.get()
const record = res.record
// テーブル_2
const tableFieldName = "テーブル_2"
const dateFieldName = "日付_1"

let tableValue = record[tableFieldName].value

// 日付基準で並び替え
tableValue.sort((a, b) => {
  const dateA = new Date(a.value[dateFieldName].value);
  const dateB = new Date(b.value[dateFieldName].value);
  return dateB - dateA;
})

// 更新データ
const body = {
  app: kintone.app.getId(),
  id: record["レコード番号"].value,
  record: {
    [tableFieldName]: {
      value: tableValue
    }
  }
};

// データの更新
await kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body);
// 画面の更新
window.location.reload()

} catch (err) {
console.log(err, “並び替えのエラー”)
}

}

const addSortButton = () => {
// 詳細画面
kintone.events.on(‘app.record.detail.show’, (event) => {
const record = event.record;
// メニュースペースにボタンの設置
const el = kintone.app.record.getHeaderMenuSpaceElement()
const button = document.createElement(“button”)
button.innerText = “並べ替え”
// ボタンにソート機能を設定
button.addEventListener(“click”, sortTable)
el.appendChild(button)

return event;

});

}

addSortButton()

@Kenichi35 さん

こんにちは、いまいちどこでうまくいってないのかわかりませんが、
とりあえず.sort() 部はこのように書いたほうがいいんじゃないかなと思います。
コードから降順にしたいかなと思って降順を想定して書いてます。

tableValue.sort((a, b) => {
  const dateA = new Date(a.value[dateFieldName].value);
  const dateB = new Date(b.value[dateFieldName].value);
  if(dateA > dateB) {
     return -1;
  }else if(dateA < dateB){
     return 1;
  } else {
     return 0;
  }
})

@y_minamitani9534 さん
ご確認ありがとうございます。
ご返信遅くなり申し訳ございません。

ありがとうございます。ご指摘箇所修正してみました。

自分のやりたいこととしてはテーブル_1、テーブル_2、テーブル_3、テーブル_4
と一つのレコード内に4つの同じ構成のテーブルがあるのですが、部署ごとにテーブルを設けていてここに報告を追加していくようにしています。

上記のコードで一つのテーブルに対して並べ替えボタンで日付順に並べかえることはできます。
コードのテーブルの入力個所にテーブル名を複数追加してもうまいこと動作せずどのように変更すればよいのかと思いまして、、把握できておらずすみません。。

並べ替えボタンのワンプッシュで4つのサブテーブルを同時に日付順(添付ファイルごと)に並べ替えたいです。

@Kenichi35

下記のような形でいかがでしょうか?

// テーブル名に対しての日付フィールドの紐づけ配列
const tableFieldMappings = [
	{ tableFieldName: "テーブル1", dateFieldName: "日付1" },
	{ tableFieldName: "テーブル2", dateFieldName: "日付2" },
	{ tableFieldName: "テーブル3", dateFieldName: "日付3" },
	{ tableFieldName: "テーブル4", dateFieldName: "日付4" },
]

// ボタンへ付与する並べ替え機能
const sortTable = async () => {
	if (!window.confirm("テーブルを並べ替えますか?")) return
	try {
		const res = await kintone.app.record.get()
		let record = res.record
		// 並べ替え部分のデータを格納する変数
		let newRecordData = {}

		// 配列分回して並べ替え後のデータ収集
		tableFieldMappings.map(item => {
			const sortItem = sortTableByDate(record, item.tableFieldName, item.dateFieldName)
			newRecordData = { ...newRecordData, ...sortItem }
		})

		await updateRecord(record["レコード番号"].value, newRecordData)
	} catch (err) {
		console.log(err, "並び替えのエラー")
	}

}

// 並べ替え
const sortTableByDate = (record, tableFieldName, dateFieldName) => {
	let tableValue = record[tableFieldName].value
	// 日付基準で並び替え
	tableValue.sort((a, b) => {
		const dateA = new Date(a.value[dateFieldName].value);
		const dateB = new Date(b.value[dateFieldName].value);
		return dateB - dateA;
	})
	return { [tableFieldName]: { value: tableValue } }
}

// 更新処理と画面の更新
const updateRecord = async (recordId, newRecordData) => {
	// 更新データ
	const body = {
		app: kintone.app.getId(),
		id: recordId,
		record: newRecordData
	};

	console.log(newRecordData)

	// データの更新
	await kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body);
	// 画面の更新
	window.location.reload()
}

// kintoneへボタン追加
const addSortButton = () => {
	// 詳細画面
	kintone.events.on("app.record.detail.show", (event) => {
		// メニュースペースにボタンの設置
		const el = kintone.app.record.getHeaderMenuSpaceElement()
		const button = document.createElement("button")
		button.innerText = "並べ替え"
		// ボタンにソート機能を設定
		button.addEventListener("click", sortTable)
		el?.appendChild(button)
		return event;
	});

}

addSortButton()
「いいね!」 1

@Kenichi35 さん

こちらこそ遅くなりました。
@pomo さんが書いてくれているコードに近しい形で考えていたのですので、
そちら参考してみていいかもですね!

「いいね!」 1

@pomo さん
前回に引き続きありがとうございます!無事にやりたいことが出来ました!

@y_minamitani9534 さん
色々アドバイス頂きありがとうございました!

「いいね!」 1

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