0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【jquery,js】ランダムな数字を配列にしてソート/重複行を削除する [Math.random(),push,sort,filter] [js13_20210311]

Last updated at Posted at 2021-03-11

処理の概要

ランダムなら数値から成る配列に対して、並べ替え、重複した値の削除を実施します。

処理のフロー:

フローは記述しません。

画面イメージ

画像1
画像2

ソースコード

index.html
一部省略...
        <link rel="stylesheet" href="./css/default.css">
        </script>
    </head>
    <body onload="init()">
        <textarea id="beforeString"></textarea><br>
        <div id="beforeLengthDisp"></div><br>
        <br><input type="button" id="execSortButton" value="ソート実行"><br>
        <textarea id="afterSortString"></textarea><br>
        <br><input type="button" id="execFilterButton" value="フィルタリング実行"><br>
        <textarea id="afterFilterString"></textarea><br>
        <div id="afterLengthDisp"></div><br>
       
    </body>
main.js
function init(){
    var lobjString = [];
    for (var i=0; i< getRandom(50,80); i++){
         lobjString.push(getRandom(50,70));
    }
    lobjGetLength = lobjString.length;
    $("#beforeLengthDisp").text("初期配列の長さは:"+ lobjGetLength);
    $("#beforeString").val(lobjString);
}

//自前乱数発生メソッド作成
function getRandom( min, max ) {
    //random()は、1未満の少数乱数を発生させる
    //max:1、max:5 乱数0.52とすると 0.52*5=2.5....2+1=3となる。便利
    var random = Math.floor( Math.random() * (max + 1 - min) ) + min;
    return random;
}

$(function(){
    $("#execSortButton").click(function(){
        lobjString = $("#beforeString").val();
        //テキストのままだと文字列なので、配列に変換する
        lobjString = lobjString.split(',');
        lobjString = lobjString.sort();
        $("#afterSortString").val(lobjString);
    });

    $("#execFilterButton").click(function(){
        lobjString = $("#beforeString").val();
        //テキストのままだと文字列なので、配列に変換する
        lobjString = lobjString.split(',');
        //重複した行を排除する。
        lfilString = lobjString.filter(function (x, i, self) {
            return self.indexOf(x) === i;
        });
        lfilString = lfilString.sort();
        $("#afterFilterString").val(lfilString);

        lobjGetLength = lfilString.length;
        $("#afterLengthDisp").text("フィルター後の配列の長さは:"+ lobjGetLength);
    });
})

ポイント

html:
(1)特になし
js:
(1)init処理
ここで、getRandom()メソッドを使って、作成する配列の数と、配列に入れる数に対して乱数を発生させる。乱数は、1未満の小数点で発生するので、Math.floorを利用する。
(2)execSortButtonボタンを押下したとき、テキストエリアから得られたのは文字列なので、配列にするためにsplitを利用する。

(3)execFilterButtonボタン押下時も同様にsplitにて配列に変換。今回、filter()メソッドは重複した値のみを排除する。このほかにも、重複している値のみを重複せずに表示したり、重複していない値のみを取り出す事もできる。

参考資料

今回は自作でーす。現場でSQLチューニングをしているのですが、冗長的な結合を排除するにあたり、重複した値の排除をjsでしなければならなくなったため(OracleのLISTAGG関数は、12cでは出来ないことが判明した)

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?