処理の概要
ランダムなら数値から成る配列に対して、並べ替え、重複した値の削除を実施します。
処理のフロー:
フローは記述しません。
画面イメージ
画像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では出来ないことが判明した)