JavaScript - 配列


■ページ目次

Top

■配列

Top
■例題
  1. プロンプトから入力した月の日数を出力するHTML"Days00.html"を、1次元配列を使用して作成してください。("Days10.html")
    1. <!-- Days10.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. <!--
    10. // 月 1 2 3 4 5 6 7 8 9 10 11 12
    11. var days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    12. // 添字 0 1 2 3 4 5 6 7 8 9 10 11
    13. var month = parseInt(prompt("月を指定してください。", 1));
    14. document.write(month + " 月は " + days[month - 1] + " 日です。");
    15. //-->
    16. </script>
    17. <noscript>JavaScriptが使用できません。</noscript>
    18. </body>
    19. </html>

  2. 10個の要素を持つ配列を宣言・作成し、その各要素に添え字と同じ値を設定し、表示するHTML"Array01.html"を作成・実行してください。
    1. <!-- Array01.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. </head>
    7. <body>
    8. <script type="text/javascript">
    9. <!--
    10. var a = new Array(10);
    11. for (var i = 0; i < a.length; i++) {
    12. a[i] = i;
    13. document.write("a[" + i + "] = " + a[i]);
    14. document.write("<br/>");
    15. }
    16. //-->
    17. </script>
    18. <noscript>JavaScriptが使用できません。</noscript>
    19. </body>
    20. </html>
  3. 下記の実行結果を参考にして、配列を引数として、その配列を下記実行結果のように各要素の内容を文字列化する関数ファイル"ArrayUtil.js"を作成してください。関数名は、toString()とします。
    このとき、配列を宣言するHTMLはHTML"Array02.html"とします。
  4. "ArrayUtil.js"

    1. /**
    2. * 配列要素を文字列化する。
    3. * @param a 配列。
    4. * @return カンマ区切りで要素をならべた文字列。
    5. */
    6. function toString(a) {
    7. var sb = "[";
    8. for (var i = 0; i < a.length; i++) {
    9. if (i != a.length -1) {
    10. sb += a[i] + ", ";
    11. } else {
    12. sb += a[i];
    13. }
    14. }
    15. sb += "]";
    16. return sb;
    17. }

    "Array02.html"

    1. <!-- Array02.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. </head>
    8. <body>
    9. <script type="text/javascript">
    10. <!--
    11. var a = new Array(10);
    12. for (var i = 0; i < a.length; i++) {
    13. a[i] = i;
    14. }
    15. document.write("a = " + toString(a));
    16. document.write("<br/>");
    17. //-->
    18. </script>
    19. <noscript>JavaScriptが使用できません。</noscript>
    20. </body>
    21. </html>
Top
■実習
Top

■配列のコピー

Top
■浅いコピー
Top
■深いコピー
Top
■実習
  1. 10 個の要素からなる配列 a に対し、つぎのことを行うHTML"Array31.html"を作成してください。
    1. 要素の正順に配列 b にコピーします。
    2. 要素の逆順に配列 c にコピーします。
    3. 要素をひとつずらして配列 d にコピーします。
    4. a の要素を逆にします。このとき、作業用の変数をひとつ使用してもかまいません。
    5. a の要素をひとつずらします。このとき、作業用の変数をひとつ使用してもかまいません。
    1. <!-- Array31.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. </head>
    8. <body>
    9. <script type="text/javascript">
    10. <!--
    11. var br = "<br/>";
    12. var hr = "<hr/>";
    13. var a = new Array(10);
    14. for (var i = 0; i < a.length; i++) {
    15. a[i] = i;
    16. }
    17. document.write("a[] = " + toString(a) + br);
    18. document.write(hr);
    19. // 要素の正順に配列bにコピーする。
    20. var b = new Array(a.length);
    21. for (var i = 0; i < a.length; i++) {
    22. // コードを記述してください。
    23. }
    24. // 要素の逆順に配列cにコピーする。
    25. var c = new Array(a.length);
    26. for (var i = 0; i < a.length; i++) {
    27. // コードを記述してください。
    28. }
    29. // 要素をひとつずらして配列dにコピーする。
    30. var d = new Array(a.length);
    31. for (var i = 0; i < a.length; i++) {
    32. // コードを記述してください。
    33. }
    34. // 要素を逆にする。
    35. var w;
    36. for (var i = 0; i < a.length / 2; i++) {
    37. // コードを記述してください。
    38. }
    39. document.write("要素を逆にする。 " + br);
    40. document.write("a[] = " + toString(a) + br);
    41. // 要素をひとつずらす。このとき、作業用の変数をひとつ使用してもよい。
    42. w = a[0];
    43. for (var i = 0; i < a.length - 1; i++) {
    44. // コードを記述してください。
    45. }
    46. a[a.length - 1] = w;
    47. // a, b, c, d のプリント
    48. document.write("要素をひとつずらす。 " + br);
    49. document.write("a[] = " + toString(a) + br);
    50. document.write("b[] = " + toString(b) + br);
    51. document.write("c[] = " + toString(c) + br);
    52. document.write("d[] = " + toString(d) + br);
    53. document.write(hr);
    54. //-->
    55. </script>
    56. <noscript>JavaScriptが使用できません。</noscript>
    57. </body>
    58. </html>
Top

■探索

Top
■線形探索
Top
■例題

  1. プロンプトから入れた整数が、アプリケーション中の配列の要素(10,20,30,40,50の5つ)と一致しているか否かを検査し、一致する場合はそのときの添字をプリントするHTML"SequentialSearch.html"を作成してください。ただし、配列の要素は昇順に並んでいるとは限りません。
    1. <!-- SequentialSearch.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function search(a, n) {
    10. for (var i = 0; i < a.length; i++) {
    11. if (a[i] == n) {
    12. return i;
    13. }
    14. }
    15. return -1;
    16. }
    17. //-->
    18. </script>
    19. </head>
    20. <body>
    21. <script type="text/javascript">
    22. <!--
    23. var n = parseInt(prompt("数値を指定してください。", 0));
    24. var a = Array(50, 30, 40, 10, 20);
    25. var i = search(a, n);
    26. if (i >= 0) {
    27. document.write(n + " was found.(index = " + i + ")");
    28. } else {
    29. document.write(n + " was not found.");
    30. }
    31. //-->
    32. </script>
    33. <noscript>JavaScriptが使用できません。</noscript>
    34. </body>
    35. </html>
Top
■2分探索
Top
■例題

  1. プロンプトから入れた整数が、配列の要素(10,20,30,40,50の5つ)と一致しているか否かを検査し、一致する場合はそのときの添字をプリントするHTML"BinarySearch.html"を作成してください。ただし、配列の要素は昇順に並んでいます。
    1. <!-- BinarySearch.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function search(a, n) {
    10. var l = 0;
    11. var h = a.length - 1;
    12. var m;
    13. while (l <= h) {
    14. m = Math.floor((l + h) / 2);
    15. if (a[m] < n) {
    16. l = m + 1;
    17. } else if (a[m] > n) {
    18. h = m - 1;
    19. } else {
    20. return m;
    21. }
    22. }
    23. return -1;
    24. }
    25. //-->
    26. </script>
    27. </head>
    28. <body>
    29. <script type="text/javascript">
    30. <!--
    31. var n = parseInt(prompt("数値を指定してください。", 0));
    32. var a = Array(10, 20, 30, 40, 50);
    33. var i = search(a, n);
    34. if (i >= 0) {
    35. document.write(n + " was found.(index = " + i + ")");
    36. } else {
    37. document.write(n + " was not found.");
    38. }
    39. //-->
    40. </script>
    41. <noscript>JavaScriptが使用できません。</noscript>
    42. </body>
    43. </html>
Top
■実習
Top

■コントロール・ブレーク

Top
■例題

  1. 昇順に並んでいる配列 a があります。配列 a の中の同じ要素の数をカウントするHTML"Count01.html"を作成してください。
    1. <!-- Count01.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function count(a) {
    10. var countValue = new Array();
    11. var prevValue = a[0];
    12. var j = 0;
    13. var count = 0;
    14. for (var i = 0; i < a.length; i++) {
    15. if (prevValue == a[i]) {
    16. count++;
    17. } else {
    18. countValue[j] = prevValue;
    19. countValue[j + 1] = count;
    20. j = j + 2;
    21. count = 1;
    22. prevValue = a[i];
    23. }
    24. }
    25. countValue[j] = prevValue;
    26. countValue[j + 1] = count;
    27. return countValue;
    28. }
    29. //-->
    30. </script>
    31. </head>
    32. <body>
    33. <script type="text/javascript">
    34. <!--
    35. var br = "<br/>";
    36. var a = new Array(2, 2, 3, 5, 5, 5, 7, 8, 8);
    37. var counter = count(a);
    38. for (var i = 0; i < counter.length; i = i + 2) {
    39. document.write(counter[i] + " : " + counter[i + 1] + br);
    40. }
    41. //-->
    42. </script>
    43. <noscript>JavaScriptが使用できません。</noscript>
    44. </body>
    45. </html>

  2. 配列の各要素の降順の順位をプリントするHTML"Rank01.html"を作成してください。
    1. <!-- Rank01.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function rank(a) {
    10. var rank = new Array(a.length);
    11. for (var i = 0; i < a.length; i++) {
    12. rank[i] = 1;
    13. for (var j = 0; j < a.length; j++) {
    14. if (a[j] > a[i]) {
    15. rank[i]++;
    16. }
    17. }
    18. }
    19. return rank;
    20. }
    21. //-->
    22. </script>
    23. </head>
    24. <body>
    25. <script type="text/javascript">
    26. <!--
    27. var br = "<br/>";
    28. var a = new Array(5, 3, 6, 5, 8, 6, 9, 1, 3, 3);
    29. var ranking = rank(a);
    30. for (var i = 0; i < a.length; i++) {
    31. document.write(a[i] + " - " + ranking[i] + br);
    32. }
    33. //-->
    34. </script>
    35. <noscript>JavaScriptが使用できません。</noscript>
    36. </body>
    37. </html>
■実習
Top

■併合

Top
■例題

  1. 昇順に並んでいる2つの配列 a, b があります。配列 a と b をまとめて、新しい配列 c をつくるHTML"Marge01.html"を作成してください。このとき、つぎのような条件を前提とします。
    1. <!-- Marge01.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function marge(a, b) {
    10. var c = new Array();
    11. var i = 0, j = 0, k = 0;
    12. while (a[i] < Number.MAX_VALUE || b[j] < Number.MAX_VALUE) {
    13. if (a[i] < b[j]) {
    14. c[k++] = a[i++];
    15. } else if (a[i] == b[j]) {
    16. c[k++] = a[i++];
    17. j++;
    18. } else {
    19. c[k++] = b[j++];
    20. }
    21. }
    22. c[k] = Number.MAX_VALUE;
    23. return c;
    24. }
    25. //-->
    26. </script>
    27. </head>
    28. <body>
    29. <script type="text/javascript">
    30. <!--
    31. var br = "<br/>";
    32. var a = new Array(10, 20, 30, 40, 50, Number.MAX_VALUE);
    33. var b = new Array(15, 20, 30, 35, 50, 60, Number.MAX_VALUE);
    34. document.write(toString(marge(a, b)));
    35. //-->
    36. </script>
    37. <noscript>JavaScriptが使用できません。</noscript>
    38. </body>
    39. </html>
■実習
Top

■整列(並べ替え)

Top
■例題

  1. プロンプトから入れた整数を昇順に並べ替えるHTML"Sort01.html"を作成してください。(例題は挿入ソートです)
    1. <!-- Sort01.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function sort(a) {
    10. var n = a.length;
    11. for (var i = 0; i < n - 1; i++) {
    12. for (var j = i + 1; j < n; j++) {
    13. if (a[i] > a[j]) {
    14. var t = a[i];
    15. a[i] = a[j];
    16. a[j] = t;
    17. }
    18. }
    19. }
    20. return a;
    21. }
    22. //-->
    23. </script>
    24. </head>
    25. <body>
    26. <script type="text/javascript">
    27. <!--
    28. var a = new Array(6, 3, 5, 1);
    29. document.write("a[] = " + toString(sort(a)));
    30. //-->
    31. </script>
    32. <noscript>JavaScriptが使用できません。</noscript>
    33. </body>
    34. </html>
Top
■実習

  1. 上記機能をsort(a)関数として、"ArrayUtil.js"に入れてください。これを確認するHTML"Sort02.html"を作成してください。
  2. 
    
    
    
Top

■文字列検索

Top
■例題

  1. プロンプトから入れた文字列の中の部分文字列のインデックスを戻すHTML"StringSearch01.html"を作成してください。
  2. なお、"ArrayUtil.js"には、文字列を文字配列にして戻す関数 "toCharArray(文字列)" を入れておきます。

    □ toCharArray(文字列)

    1. /**
    2. * 文字列を文字配列にする。
    3. * @param s 文字列。
    4. * @return 文字配列。
    5. */
    6. function toCharArray(s) {
    7. var ca = new Array();
    8. for (var i = 0; i < s.length; i++) {
    9. ca[i] = s.charAt(i);
    10. }
    11. return ca;
    12. }

    "StringSearch01.html"

    1. <!-- StringSearch01.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function search(a, b) {
    10. var i, j;
    11. for (i = 0; i < a.length - b.length + 1; i++) {
    12. for (j = 0; j < b.length; j++) {
    13. if (a[i + j] != b[j]) {
    14. break;
    15. }
    16. }
    17. if (j >= b.length) {
    18. break;
    19. }
    20. }
    21. if (j < b.length) {
    22. i = -1;
    23. }
    24. return i;
    25. }
    26. //-->
    27. </script>
    28. </head>
    29. <body>
    30. <script type="text/javascript">
    31. <!--
    32. var br = "<br/>";
    33. var a0 = prompt("文字列を入力してください。", "");
    34. var b0 = prompt("探す文字列を入力してください。", "");
    35. var a = toCharArray(a0);
    36. var b = toCharArray(b0);
    37. document.write("search(\"" + a0 + "\", \"" + b0 + "\") = " + search(a, b) + br);
    38. document.write("\"" + a0 + "\".indexOf(\"" + b0 + "\") = " + a0.indexOf(b0)); // 参考 indexOf() メソッド
    39. //-->
    40. </script>
    41. <noscript>JavaScriptが使用できません。</noscript>
    42. </body>
    43. </html>
Top
■実習
Top

■その他

Top
■例題 - エラトステネスのふるい

  1. エラトステネスのふるいを利用して、プロンプトから指定された数までの素数をすべてプリントするHTML"Eratosthenes.html"を作成してください。
    1. <!-- Eratosthenes.html -->
    2. <html>
    3. <head>
    4. <title>わたしのホーム・ページ</title>
    5. <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"/>
    6. <script type="text/javascript" src="ArrayUtil.js"></script>
    7. <script type="text/javascript">
    8. <!--
    9. function eratosthenes(n) {
    10. var prime = new Array(n); // ふるい
    11. var primevalue = new Array(); // 素数配列(戻り値)
    12. for (var i = 0; i < n; i++) {
    13. prime[i] = true;
    14. }
    15. for (var i = 2; i < n; i++) {
    16. if (prime[i]) {
    17. for (var j = 2 * i ; j < n; j = j + i) {
    18. prime[j] = false;
    19. }
    20. }
    21. }
    22. var j = 0;
    23. for (var i = 2; i < n; i++) {
    24. if (prime[i]) {
    25. primevalue[j] = i;
    26. j++;
    27. }
    28. }
    29. return primevalue;
    30. }
    31. //-->
    32. </script>
    33. </head>
    34. <body>
    35. <script type="text/javascript">
    36. <!--
    37. var br = "<br/>";
    38. var n = parseInt(prompt("整数を指定してください。", 0));
    39. var primevalue = eratosthenes(n);
    40. for (var i = 0; i < primevalue.length; i++) {
    41. document.write(" " + primevalue[i]);
    42. }
    43. document.write(br);
    44. //-->
    45. </script>
    46. <noscript>JavaScriptが使用できません。</noscript>
    47. </body>
    48. </html>
Top

inserted by FC2 system