Advertisement
Awn_pastebin

よく使うけどよく忘れる配列の使い方.js

Oct 25th, 2016
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //////////////////////////////////////////////////////////////////////////
  2. //
  3. //@title よく使うけどよく忘れる配列の使い方
  4. //@private
  5. //
  6. //作った人: Awn(@Awn_tw)
  7. //
  8. //改定履歴
  9. //-201xxxxx(ver 1.0.0): 新規作成
  10. //
  11. //諸注意
  12. //-ご利用は自己責任でお願いします。
  13. //-スクリプトは予告なく修正または廃止されることがあります。
  14. //-コンソールでしか動かない、と思います。
  15. //-悪用は厳禁です。
  16. //-改造改良改悪はご自由にどうぞ。
  17. //
  18. //////////////////////////////////////////////////////////////////////////
  19.  
  20. //////////////////////////////////////////////////////////////////////////
  21. //
  22. // 君 も 今 日 か ら 配 列 中 毒 者 に な ろ う !
  23. //
  24. //////////////////////////////////////////////////////////////////////////
  25.  
  26. /*--------------------------------*/
  27. // 基本
  28. /*--------------------------------*/
  29. //文字列と数字
  30. 11 - 0;
  31. //結果は数字の11
  32.  
  33. "11" - 0;
  34. //結果は数字の11
  35.  
  36. 11 + "";
  37. //結果は文字列の"11"
  38.  
  39. "11" + "";
  40. //結果は文字列の"11"
  41.  
  42.  
  43. /*--------------------------------*/
  44. // 配列の超基本
  45. /*--------------------------------*/
  46. //空の配列
  47. [];
  48.  
  49. //素直に列挙する
  50. var data = ["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ"];
  51.  
  52. //文字列 => 配列
  53. var str = "あいうえおかきくけこ";
  54. var data = str.split("");//dataは["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ"]となる
  55.  
  56. //数字 => 配列
  57. var num = 1234567890;
  58. var str = num + "";//strは"1234567890"となる
  59. var data = str.split("");//dataは["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]となる
  60.     /*
  61.         => しかしこれだと配列の要素は文字列となってしまう
  62.          data = data.map(function(elm){return elm - 0;}); とすることによって、配列の要素を数字にすることができる
  63.     */
  64.  
  65. //配列 => 文字列
  66. var data = ["あ", "い", "う", "え", "お"];
  67. var str = data.join("");//strは"あいうえお"となる
  68.  
  69.  
  70. //要素へのアクセス
  71. var data = ["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ"];
  72. data[0];//"あ"
  73. data[1];//"い"
  74. data[9];//"こ"
  75. data[10];//undefined
  76. data[100];//undefined
  77. var a = [];
  78. a[0];//undefined
  79. a[1];//undefined
  80.  
  81.  
  82. //配列の長さ
  83. //要素がある場合
  84. var data = ["あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ"];
  85. data.length;//10
  86.  
  87. //要素がない(=空の配列の)場合
  88. var data = [];
  89. data.length;//0
  90.  
  91.  
  92. //配列とイコール(==と===)
  93. var a = ["あ", "い", "う", "え", "お"];
  94. var b = ["か", "き", "く", "け", "こ"];
  95. var c = ["あ", "い", "う", "え", "お"];
  96. var d = a;
  97.  
  98. a == a;//true
  99. a == b;//false
  100. a == c;//false
  101. a == d;//true
  102. a === a;//true
  103. a === b;//false
  104. a === c;//false
  105. a === d;//true
  106.  
  107. var a = [];
  108. var b = [];
  109.  
  110. a == b;//false
  111. a === b;//false
  112. a == [];//false
  113. a === [];//false
  114. a == 0;//true
  115. a === 0;//false
  116. a == undefined;//false
  117. a === undefined;//false
  118. a == null;//false
  119. a === null;//false
  120.     //=> 配列が空の配列かどうか調べるには・・・
  121.         a.length == 0;//true
  122.         a.length === 0;//true
  123.         //lengthプロパティを用いる
  124.  
  125.  
  126. //配列のコピー
  127. var a = ["あ", "い", "う", "え", "お"];
  128. var b = a;
  129. b;//b = ["あ", "い", "う", "え", "お"];
  130. a[5] = "か";
  131. a;//["あ", "い", "う", "え", "お", "か"]
  132. b;//["あ", "い", "う", "え", "お", "か"]
  133.     // a === b は true
  134.         // b に代入されたのは, aの要素ではなく「aへの参照」であるため、aが変更されるとbの中身はaと同じになってしまう
  135.         // これを回避する(すなわち、a === b が falseとなる)には・・・
  136.             var a = ["あ", "い", "う", "え", "お"];
  137.             var b = a.join("").split("");// b = ["あ", "い", "う", "え", "お"];
  138.             a === b;//false
  139.             a[5] = "か";
  140.             a;//["あ", "い", "う", "え", "お", "か"]
  141.             b;//["あ", "い", "う", "え", "お"]
  142.                 //当然、 a === b はfalse
  143.                 /*
  144.                     もちろん、mapを使い
  145.                         var a = ["あ", "い", "う", "え", "お"];
  146.                         var b = a.map(function(elm){return elm;});// b は ["あ", "い", "う", "え", "お"]
  147.                         a === b;//false
  148.                     とすることも可
  149.                 */
  150.  
  151. //配列のコピーは参照をコピーするだけなので恩恵を受けることもあるが、
  152. //思わぬバグの温床となることもあるので要注意
  153. //値をコピーしたいのであれば、join("").split("")やmapなどで値を明示的にコピーしよう
  154.  
  155.  
  156. /*--------------------------------*/
  157. // 配列のpop(),shift(),push(),unshift()
  158. /*--------------------------------*/
  159. var a = [];
  160.  
  161. //pushは末尾に追加
  162. a.push(4);//[4]
  163. a.push(5);//[4,5]
  164. a.push(6);//[4,5,6]
  165.  
  166. //unshiftは先頭に追加
  167. a.unshift(3);//[3,4,5,6]
  168. a.unshift(2);//[2,3,4,5,6]
  169. a.unshift(1);//[1,2,3,4,5,6]
  170.  
  171. //popは末尾から取り出し,取り出した要素は削除される
  172. a.pop();//戻り値は6, aは[1,2,3,4,5]
  173. a.pop();//戻り値は5, aは[1,2,3,4]
  174. a.pop();//戻り値は4, aは[1,2,3]
  175.  
  176. //shiftは先頭から取り出し,取り出した要素は削除される
  177. a.shift();//戻り値は1, aは[2,3]
  178. a.shift();//戻り値は2, aは[3]
  179. a.shift();//戻り値は3, aは[]
  180.  
  181. //空の配列から取り出すことはできないのでundefinedが返ってくる
  182. a.pop();//戻り値はundefined, aは[]
  183. a.shift();//戻り値はundefined, aは[]
  184.  
  185.  
  186. /*--------------------------------*/
  187. // 配列で使うと便利なメソッド
  188. /*--------------------------------*/
  189.  
  190.  
  191. var data = ["あ", "い", "う", "え", "お"];
  192. data.map(function(elm,ind,arr){return ind + ":" + elm;});
  193. // -> ["0:あ", "1:い", "2:う", "3:え", "4:お"]
  194.     //配列の要素に関数を適用しその結果から成る配列を返す
  195.     //elm => 配列の要素, ind => 添え字, arr => 元の配列
  196.  
  197. var data = ["あ", "い", "う", "え", "お"];
  198. data.map(function(elm,ind,arr){return elm + "んこ";});
  199. // -> ["あんこ", "いんこ", "うんこ", "えんこ", "おんこ"]
  200.  
  201. var data = ["あんぱん","いんちき","うよきょくせつ", "えんそく","おらんだたいしかん"];
  202. data.filter(function(elm,ind,arr){return elm.length > 4;});
  203. // -> ["うよきょくせつ", "おらんだたいしかん"]
  204.     //配列の要素に関数を適用しその結果がtrueである要素から成る配列を返す
  205.  
  206. var data = ["りんご","ばなな","りんご","ばなな","ばなな","すいか","まつたけ"];
  207. data.filter(function(elm,ind,arr){return arr.indexOf(elm) === ind;});//配列の重複除去
  208. // -> ["りんご", "ばなな", "すいか", "まつたけ"]
  209.  
  210. var data = ["りんご","ばなな","りんご","ばなな","ばなな","すいか","まつたけ","すいか"];
  211. ( data.filter(function(elm,ind,arr){return arr.indexOf(elm) === ind;}) )
  212. .map(function(elm1){ return (data).filter(function(elm2){return elm1 === elm2;});});
  213. // -> [[りんご,りんご],[ばなな,ばなな,ばなな],[すいか],[まつたけ]]
  214.     //要素のグルーピング
  215.  
  216. var data = ["りんご","ばなな","りんご","ばなな","ばなな","すいか","まつたけ","すいか"];
  217. data.some(function(elm,ind,arr){return elm === "まつたけ";});
  218. // -> true
  219.     //関数を満たす配列の要素が一つでもあればtrueを返す
  220.  
  221. var data = ["りんご","ばなな","りんご","ばなな","ばなな","すいか","まつたけ","すいか"];
  222. data.every(function(elm,ind,arr){return elm === "まつたけ";});
  223. // -> false
  224.     //全ての配列の要素が関数を満たせばtrueを返す
  225.  
  226. //TODO:
  227. /* ここにdata.reduce(function(elm){return;});の説明を書く*/
  228. /* see https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array */
  229.  
  230.  
  231. //極端な例
  232. var myfunc = [
  233.                 function(x){return Math.sin(x);},
  234.                 function(x){return Math.cos(x);},
  235.                 function(x){return Math.tan(x)}
  236.             ];
  237. var f = function(t){return myfunc.map(function(elm){return elm(t);});}
  238. f(Math.PI/6);//[0.49999999999999994, 0.8660254037844387, 0.5773502691896257]
  239.  
  240.  
  241. //どんな要素がどれくらい入っているか調べるアレ
  242. var data = ["りんご","ばなな","りんご","ばなな","ばなな","すいか","まつたけ","すいか"];
  243. function doArraySort(data){
  244.     var data_key = data.filter(function(elm,ind,arr){return arr.indexOf(elm) === ind;});
  245.     var data_value = ( data_key.map(function(elm1){return data.filter(function(elm2){return elm1 === elm2})}) ).map(function(elm){return elm.length; });
  246.     var output = {};
  247.     for(var ix = 0; ix < data_key.length; ix++){
  248.         output[ data_key[ix] ] = data_value[ix];
  249.     }
  250.     return output;
  251. }
  252. doArraySort(data)//-> Object {りんご: 2, ばなな: 3, すいか: 2, まつたけ: 1}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement