配列内の値の順番をランダムに並び替えることが出来る javascript用のライブラリ「shuffle-array」の紹介です。
// before
[1, 2, 3, 4, 5]
// after
[2, 4, 3, 1, 5]
上のスニペットのような " 配列の値をランダムに並び替え "、そんな機能は どの言語にも 標準ライブラリとして 関数が用意されていそうですが、残念ながら javascript には用意されていません。
因みに、Python, Ruby には shuffle関数が用意されており、ホボ一行で書くことができます。
# python
import random
arr = [1, 2, 3, 4, 5]
random.shuffle(arr)
# ruby
arr = [1, 2, 3, 4, 5]
arr.shuffle
javascriptで 上のような処理を自前で実装することは そこまで難しくないですが、" ループで回して Math.floorを使って ... " など多少の手間が掛かります。
そんな実装の 手間を省いて +α の機能が備わっている便利な javascript用のライブラリが「shuffle-array」です。
- 配列、オブジェクトの順番をランダムに入れ替えることができる
shuffle-array は コマンドライン上から ' npm
', ' yarn
', ' bower
' などの パッケージマネージャーを使って 導入が可能です。
# npm
npm install shuffle-array --save
# yarn
yarn add shuffle-array
# bower
bower install shuffle-array
/* ライブラリの呼び出し */
// CommonJS(node.js)で呼び出す場合
const shuffle = require('shuffle-array');
//ES-2015など
import shuffle from 'shuffle-array';
// bowerや直接ライブラリを入手し、ブラウザ側で直接呼び出す場合
shuffle(arr);
shuffle_array は その名の通り、配列をランダムにシャッフルさせることに特化しているライブラリなので、覚えることも 4つ程です。
1: shuffle( array )
第一引数に、配列 又は オブジェクトを入れると値の順番がランダムにシャッフルされます。また、元になる配列の順番も書き換わります。
const shuffle = require('shuffle-array');
var array = [1, 2, 3, 4, 5];
// 変数 arrayの順番が上書きされます
var result = shuffle(array)
console.log(array); // [ 1, 4, 5, 3, 2 ]
console.log(result); // [ 1, 4, 5, 3, 2 ]
/**
var obj = [
{ 1 : 'val1'},
{ 2 : 'val2'},
{ 3 : 'val3'},
{ 4 : 'val4'},
{ 5 : 'val5'}
];
// オブジェクトでも問題ありません
shuffle(obj);
*/
2 : shuffle( array, { copy : true }
)
こちらは 第二引数に copyオプションが入っています。 { copy : true }
が入っていると、元となる配列の値 ( 順番 ) は変更されません。
const shuffle = require('shuffle-array');
var array = [1, 2, 3, 4, 5];
// 変数 arrayは元のまま保持されます
var result = shuffle(array, { copy : true})
console.log(result); // [ 3, 2, 4, 1, 5 ]
console.log(array); // [ 1, 2, 3, 4, 5 ]
3 : shuffle.pick
( array )
pickメソッドはランダムに回した配列内から 1 つだけ値を抜き出したい時に使います。また、元の配列の順番は変更されません。
var array = [1, 2, 3, 4, 5];
// 値を1つ取り出し
shuffle.pick(array); // exp: 3
4 : shuffle.pick(array, { picks: NUM }
)
{ picks : NUM } オプションが入っていると、指定した数の値が取り出せます。オプション無しの pick メソッドは string, integer などの配列内の値で返ってきますが、オプションが入っていると object 型で返ってきます。
var array = [1, 2, 3, 4, 5];
// 3つ値を取り出し
shuffle.pick(array, { 'picks': 3 }); // [ 3, 5, 1 ]
以上が shuffle-array の紹介でした。ライブラリ本体が 768byte と軽く、色々と使える場面も多いので、気になった人は ぜひぜひチェックしてください。
GitHub : pazguille/shuffle-array