JavaScriptのiterableタイプ(Map,Set,Arrayの3種類)の遍歴方法for in;for of;forEachの使い方の違い
3003 ワード
ループ
これが、新しい
しかしながら、より良い方法は、
Run
A, index = 0 B, index = 1 C, index = 2
なお、
いくつかのパラメータに興味がない場合は、JavaScriptの関数呼び出しはパラメータが一致する必要がないため、無視できます.例えば、
廖雪峰の公式サイトより抜粋
Array
は下付きループを採用することができ、ループMap
とSet
は下付きループを使用することができない.集合型を統一するために、ES 6規格は新しいiterable
型を導入し、Array
、Map
およびSet
はいずれもiterable
型に属する.iterable
型を有する集合は、新しいfor ... of
サイクルによって巡回することができる.for ... of
ループはES 6によって導入された新しい構文である.for ... of
サイクルで集合を巡回し、次のように使用します.var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // Array
console.log(x);
}
for (var x of s) { // Set
console.log(x);
}
for (var x of m) { // Map
console.log(x[0] + '=' + x[1]);
}
for ... of
サイクルとfor ... in
サイクルの違いに疑問があるかもしれません.for ... in
ループは、履歴に問題があるため、実際にはオブジェクトの属性名を巡回します.Array
配列も実際にはオブジェクトであり、各要素のインデックスは属性とみなされます.Array
オブジェクトに追加のプロパティを手動で追加すると、for ... in
サイクルは予想外の予期せぬ効果をもたらします.var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
console.log(x); // '0', '1', '2', 'name'
}
for ... in
サイクルはname
を含むが、Array
のlength
属性は含まれない.for ... of
サイクルは、これらの問題を完全に修正し、集合自体の要素のみを循環します.var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
console.log(x); // 'A', 'B', 'C'
}
これが、新しい
for ... of
サイクルを導入する理由です.しかしながら、より良い方法は、
iterable
に組み込まれたforEach
メソッドを直接使用し、反復するたびに自動的に関数をコールバックする関数を受信することである.Array
を例にとります.'use strict';
var a = ['A', 'B', 'C'];
a.forEach(function (element, index, array) {
// element:
// index:
// array: Array
console.log(element + ', index = ' + index);
});
Run
A, index = 0 B, index = 1 C, index = 2
なお、
forEach()
の方法はES 5である.1標準で導入されたもので、ブラウザがサポートされているかどうかをテストする必要があります.Set
はArray
と似ていますが、Set
にはインデックスがありません.したがって、コールバック関数の最初の2つのパラメータは要素自体です.var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});
Map
のコールバック関数パラメータは、value
、key
、およびmap
の順である.var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
いくつかのパラメータに興味がない場合は、JavaScriptの関数呼び出しはパラメータが一致する必要がないため、無視できます.例えば、
Array
のelement
を得るだけです.var a = ['A', 'B', 'C'];
a.forEach(function (element) {
console.log(element);
});
廖雪峰の公式サイトより抜粋