【FormBridge】テーブル内のバブルソートについて

何を実現したいのかを書きましょう

お世話になっております。
kViewerとFormBridgeを連携させており、
フォームブリッジの中に入れたテーブルの中の項目をバブルソートで降順で並べさせているのですが、うまくいかないパターンがありアドバイスをいただきたいです。

下記の事象が仕様なのか、ソースに改善点があるのか悩んでいます。

■使用ツールとページ
kViewer

FormBridge

■やっていること
①kViewerを入口として任意のレコードをFormBridgeで編集する
②確認ボタンを押した際にJSでテーブル内の当年売上総額を基準に降順で並び変える

発生した問題やエラーメッセージを具体的に書きましょう

■困っていること
当年売上総額の項目について、新規入力した行は問題ないが、既存で入力してある行についてはうまくソートされない
既存で入力してある行を並び替えする(確認ボタンを押す)と右図のようにおかしくなる
image

■仮説
いくつかのパターンで検証したところ、
当年売上総額の項目を少しでも数字を編集した場合は問題なく並び替えが走るが、
既存で入力された行を並び替えする場合はおかしくなるようです。

実行したコードをコピー&ペーストしましょう

(function(){
  "use strict";

  fb.events.form.confirm = [function(state){
    
    //デバックログ
    console.log(state.record);
    //console.log(state.record.テスト.value.length);

    for ( let outer = 0; outer < state.record.テスト.value.length-1; outer++ ) {
      console.log(outer + 1 + "週目");
      for ( let i = state.record.テスト.value.length-1; i > outer; i-- ) {
        console.log('現在のインデックス:' + i);
        console.log('比較:i('+state.record.テスト.value[i].value.当年売上総額.value + '):i-1(' + state.record.テスト.value[i-1].value.当年売上総額.value +')' );
        if ( state.record.テスト.value[i].value.当年売上総額.value > state.record.テスト.value[i-1].value.当年売上総額.value ) {
          //log
          console.log('swapped');
          
          let tmp = state.record.テスト.value[i];
          state.record.テスト.value[i] = state.record.テスト.value[i-1];
          state.record.テスト.value[i-1] = tmp;
        }
      }
    }
    return state;
  }];

})();

よろしくお願いいたします。

ぱっと見ですが、もしかして、右の方は「文字列」ではないですか?

文字列だと「2」のほうが「1」より大きいので上に来ます:eyes:
辞書的な並び方になってしまっているのかも~

と思いました。

これが原因の場合、
Number(state.record.~中略~.value)のようにして数値にしてから比較するといいと思います。

コードも読まずのぱっと見でゴメンナサイ:pray:

「いいね!」 1

jurippeさん
早々にご返信ありがとうございます!うまくいきました!!!!!

以下備忘です。
kintone、およびFormbridgeでは文字列ではなく数値でフォーム設定、
扱っているデータの検証のために出力していたログでも、それぞれのデータの型はnumberで返ってきていたので問題ないと思っていたのでたどり着きませんでした。
こちらのチケットにつきましては解決とさせていただきます。
ありがとうございました。

「いいね!」 1

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