回答編集履歴

1

コードの例を追記

2017/01/31 10:45

投稿

yamato_hikawa
yamato_hikawa

スコア2092

test CHANGED
@@ -3,3 +3,111 @@
3
3
  Math.max関数の引数に配列を適用したりだとか、
4
4
 
5
5
  配列用メソッドを持たない配列のようなオブジェクトに対して、配列用のメソッドを使用するケースが考えられます。
6
+
7
+
8
+
9
+ # jQueryオブジェクトにJavaScriptのmapメソッドを使用する
10
+
11
+ `$el.map()`という風に記述すると、jQueryで定義されたmapメソッドを実行してしまいます。
12
+
13
+
14
+
15
+ ```javascript
16
+
17
+ var $el = $('.sample');
18
+
19
+
20
+
21
+ var result = [].map.call($el, function(item, index){
22
+
23
+ // 処理
24
+
25
+ var $item = $(item);
26
+
27
+ });
28
+
29
+ ```
30
+
31
+
32
+
33
+ # 配列の最小値・最大値を求める
34
+
35
+ `Math.max` `Math.min`の引数に指定できるのは通常だと数値ですが、applyを併用すると配列ごと渡せます。
36
+
37
+
38
+
39
+ ```javascript
40
+
41
+ Math.max.apply(null, array);
42
+
43
+ Math.min.apply(null, array);
44
+
45
+ ```
46
+
47
+
48
+
49
+ # 配列のようなオブジェクトに対して、配列用のメソッドを使用する
50
+
51
+ 例えば、`document.querySelectorAll()`で取得できるオブジェクトはNodeListと呼ばれる配列のようなオブジェクトです。
52
+
53
+ NodeListは配列用のメソッドをそのままでは使用できませんが、callやapplyを使用することで配列用メソッドを使えるようになります。
54
+
55
+
56
+
57
+ ```javascrpt
58
+
59
+ var el = document.querySelectorAll('.class');
60
+
61
+
62
+
63
+ el.slice() // 不可
64
+
65
+ el.map() // 不可
66
+
67
+ ```
68
+
69
+
70
+
71
+ call+sliceを使って配列に変換するパターン
72
+
73
+ ```javascript
74
+
75
+ var el = document.querySelectorAll('.class');
76
+
77
+
78
+
79
+ // 変換1
80
+
81
+ var list = [].slice.call(el);
82
+
83
+
84
+
85
+ // 変換2
86
+
87
+ var list = Array.prototype.slice.call(el)
88
+
89
+
90
+
91
+ list.map() // 使える
92
+
93
+ ```
94
+
95
+
96
+
97
+ applyを使って変換するパターン
98
+
99
+ ```javascript
100
+
101
+ var el = document.querySelectorAll('.class');
102
+
103
+
104
+
105
+ // 変換3
106
+
107
+ var list = Array.apply(null, el);
108
+
109
+
110
+
111
+ list.map() // 使える
112
+
113
+ ```