• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. JavaScriptで配列を扱う時によく使うメソッド#8【配列の値を並び替える・ランダムにシャッフルする】

JavaScriptで配列を扱う時によく使うメソッド#8【配列の値を並び替える・ランダムにシャッフルする】

  • 2019.12.11
  • プログラミング
  • JavaScript
Updated: 2019.12.11
いろんな配列処理のメソッドを紹介してきましたが、今回は比較的いろんな場面で使える、配列の値の並び替えについてのメソッドを見てきたいと思います。中でもランダムに値をシャッフルするのは応用すればゲームの実装にも活用できます。  
Array.sort()
バラバラと不規則に並んだ配列の値は「Array.sort()」を使うことで、名前の並び順できれいに並び替えることができます。使い方もいたってシンプルで、対象の配列に対してメソッドを実行するだけです。 【javascript】
const dataArray = [ 'D', 'C', 'B', 'E', 'A' ];
const result = dataArray.sort();
console.log(result);
console.log(dataArray);
  実際にメソッドを実行すると、このように並び変わっているのが確認できます。文字列であればアルファベット、もしくは50音順に、数値であれば小さい数から順に並んでいきます。 【console】
[ "A", "B", "C", "D", "E" ]    // result
[ "A", "B", "C", "D", "E" ]    // dataArray
  ただし、このArray.sort()ですが、元の配列も破壊してしまうので注意が必要です。あらかじめコピーしたもので実行するなどしておきます。  
Array.reverse()
配列の並びをそのまま逆にする場合には「Array.reverse()」が便利です。先ほどと同じく、対象の配列にメソッドを実行する形になります。 【javascript】
const dataArray = [ '1st', '2nd', '3rd' ];
const result = dataArray.reverse();
console.log(result);
console.log(dataArray);
  結果を見てみると、このように並びが逆になっているのが確認できますね。こちらも見ての通り同じく元の配列に影響が出るので、扱う際には注意します。 【console】
[ "3rd", "2nd", "1st" ]    // result
[ "3rd", "2nd", "1st" ]    // dataArray
   
比較関数を使った昇順と降順での並び替え
Array.sort()を使った場合、デフォルトでは昇順になりますが、降順で並べたいなど、並びの順をコントロールしたい場合もあるかと思います。そんな時には、コールバック関数にて、比較関数を使うことで並び順を制御することができます。下記のサンプルでは、オブジェクト内にあるpriceの値が小さい順に並べ替える例となります。 【javascript】
const dataObject = [
 { name: 'みかん', price: 300 },
 { name: 'バナナ', price: 90 },
 { name: 'ぶどう', price: 500 },
 { name: 'りんご', price: 100 },
]
const result = dataObject.sort((a, b) => {
 // 昇順での並び替え
 return a.price - b.price;
});
console.log(result);
  Array.sort()の引数に、「a」「b」などの値を指定し、コールバック関数にて、その2つの値を比較評価します。そしてその返り値を返すようにすると、下記のように指定した順番で並び変わっているのが確認できます。 【console】
{ name: 'バナナ', price: 90 },
{ name: 'りんご', price: 100 },
{ name: 'みかん', price: 300 },
{ name: 'ぶどう', price: 500 }
  もちろん、昇順だけでなく降順でも並べることができます。その場合には比較関数内の式を下記のように逆にしてあげるだけでOKです。 【javascript】
const dataObject = [
 { name: 'みかん', price: 300 },
 { name: 'バナナ', price: 90 },
 { name: 'ぶどう', price: 500 },
 { name: 'りんご', price: 100 },
]
const result = dataObject.sort((a, b) => {
 // 降順での並び替え
 return b.price - a.price;
});
console.log(result);
  今度は逆にpriceの値が高いものから並んでいるのが確認できますね。比較関数をコールバックで使うことで、並び順のコントロールだけでなく、オブジェクトのプロパティ値を参照した並べ替えも可能となります。 【console】
{ name: 'ぶどう', price: 500 },
{ name: 'みかん', price: 300 },
{ name: 'りんご', price: 100 },
{ name: 'バナナ', price: 90 }
   
乱数を使った配列のシャッフル
配列の並び替えの応用としてよく使われるのが、配列の値をランダムにシャッフルする方法です。いくつか方法はあるのですが、今回は下記のような乱数を使ったものをサンプルとして用意しました。 【javascript】
const dataArray = ['1月', '2月', '3月', '4月', '5月'];
const randomNumbers = [];
for (let i = 0; i < dataObject.length; i++) {
 randomNumbers.push(Math.random());
}
const result = dataObject.sort((a, b) => {
 return randomNumbers[dataObject.indexOf(a)] - randomNumbers[dataObject.indexOf(b)]
});
console.log(result);
  処理を詳しく見てみると、まず乱数を入れる空の配列を用意します。次に配列の長さ分だけfor文で繰り返し処理を行います。その中で、乱数を作成し、配列の中に入れておきます。そして、先ほどの比較関数で配列を並び変えるのですが、比較対象となる値に乱数が入ることになりますので、昇順と降順がバラバラに繰り返されます。そのようにすることで、配列の値の並びを変えている形になります。 【console】
[ "2月", "1月", "3月", "5月", "4月" ]
  このように並び替えの結果を見てみると、確かにランダムでシャッフルされているのが確認できますね。ただし、この方法だと、たまたま乱数の比較結果で同じものが続く場合もあります。そこでより精度の高いシャッフルを行うために「フィッシャーイェーツのアルゴリズム」を使った配列のシャッフルという方法もあります。 【javascript】
const dataArray = ['1月', '2月', '3月', '4月', '5月'];
for (let i = dataArray.length - 1; i >= 0; i--) {
 const randomNumber = Math.floor(Math.random() * (i + 1));
 [dataArray[i], dataArray[randomNumber]] = [dataArray[randomNumber], dataArray[i]];
}
console.log(dataArray);
  先ほどと大きく違うのは、Array.sort()のメソッドを使っていない点が挙げられます。行われてる処理としては、インデックスに応じて、配列の値同士を入れ替えているという形になります。コードもシンプルになり、より精度の高いシャッフルができるので、ランダムにシャッフルしたい場合にはこちらを使うといいのではないでしょうか。 【console】
[ "1月", "5月", "4月", "3月", "2月" ]
  同じく、配列の値がランダムにシャッフルされているのが確認できますね。  
まとめ
【配列の値をソートして整える】 Array.sort();   【配列の値を逆に並べ替える】 Array.reverse();   【配列の値を昇順にソートする】 Array.sort( ( a, b ) => a - b );   【配列の値を降順にソートする】 Array.sort( ( a, b ) => b - a );   【配列の値をランダムにシャッフルする】 const num = []; for ( let i = 0; i < Array.length; i++ ) {   num.push( Math.random() ); } Array.sort( ( a, b ) => num[Array.indexOf( a )] - num[Array.indexOf( b )] ); もしくは for ( let i = Array.length - 1; i >= 0; i-- ) {   const num = Math.floor( Math.random() * ( i + 1 ) );   [Array[i], Array[num]] = [num[num], Array[i]]; }   今回は配列において値の並び替えについてのメソッドをまとめてみました。他の処理と組み合わせた形で、いろんな場面で使われるのではないでしょうか。当サイトでは別記事にもいろんなメソッドをまとめていますので、そちらも是非ご参考にどうぞ。   (こちらの記事もどうぞ) JavaScriptで配列を扱う時によく使うメソッド#1【配列の作成・値や総数の取得・空判定など】 JavaScriptで配列を扱う時によく使うメソッド#2【配列の値に対して繰り返し処理を行う】 JavaScriptで配列を扱う時によく使うメソッド#3【配列に値が含まれるか・値のインデックスを検索する】 JavaScriptで配列を扱う時によく使うメソッド#4【配列から条件に合う値を取得・フィルタリングする】 JavaScriptで配列を扱う時によく使うメソッド#5【配列の値から別の配列を作成・単一の値を算出する】 JavaScriptで配列を扱う時によく使うメソッド#6【配列の値を追加・削除する】 JavaScriptで配列を扱う時によく使うメソッド#7【配列の値を切り取る・値を差し替える・配列を合体する】
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact