以下は、ECMA5 配列の新しいメソッド forEach() の模倣実装を紹介するコード例です。具体的なコードは次のとおりです。
var o = { forEach: function (callback) { // alert(this.length); for (var i = , len = this.length; i < len; i++) { callback && callback(this[i], i, this); } }, get length(){ var sum=; for(var n in this) { sum+=; } return sum; } }; Object.defineProperty(o,"length",{enumerable:false}); Object.defineProperty(o,"forEach",{enumerable:false}); o[] = ; o[] = ; o[] = ; o.forEach(function(v,i,arr){ arr[i]=v+; console.log(arr[i]+"callback"); });
注目に値する:
1.コールバック関数の使用
2.defineProperty関数とdefineProperties関数の意味
これら 2 つの関数はどちらも、オブジェクト プロパティの 4 つの主要な特性 (値、書き込み可能性、列挙可能性、構成可能性) を定義できます
まだ時間がありますので、次のように ECMA5 の配列の新しいメソッドをいくつか紹介します。
今日演習を行っているときに、fitter(); を見つけました。これらの新しい配列メソッドは以前にも見たことがありますが、実際の戦闘では使用したことがないので、今日はそれらを復習します。
forEaach()
このメソッドは配列を最初から最後まで走査し、配列内の各要素に対して指定された関数を呼び出します。この関数は、foreach の最初のパラメーターとして機能します。呼び出される関数には、現在の配列要素、現在の要素のインデックス、および走査される配列の 3 つのパラメータを指定できます。パラメータが 1 つしかない場合、このパラメータが現在の配列要素になります。
var data = [1,2,3,4,5] ; // 计算数组的和 var sum = 0 ; data.forEach(function(value){sum += value; }); // 这里的value 分别代指 data[0~4]; console.log( sum ) // 15 // 每个数组元素自加1 data.forEach(function(v, i, a){ a[i] = v + 1; }) // v 分别代指 data[0~4]; a 代指data; map() ;
map() メソッド は、呼び出された配列の各要素を指定された関数に渡し、関数の戻り値を含む配列 (呼び出した配列とまったく同じ形式) を返します。 : 戻り値が必要であり、呼び出し元の配列を変更してはなりません。
var a = [1,2,3]; b = a.map(function(x) { return x * x; }); filter()
この関数の戻り値は呼び出し関数のサブセットです。これは、関数に渡された関数式が論理的な判断に使用されるためです。これが true の場合、現在の値がサブセット配列にプッシュされて返されます。
var getNum = function (a, b, k) { return a.filter(function (v) {return b.indexOf(v) > -1;})[k-1]; } var A = [3,4,5,6,7,8,9]; var B = [12,10,8,6]; console.log(getNum(A, B, 1)) console.log(getNum(A, B, 2)); every() some() ;
これら 2 つの関数のパラメータはどちらも配列の要素を判定する判定関数であり、戻り値は true または false になります。
every()すべての配列要素が判定関数を呼び出して true を返した場合のみ、戻り値は &;
に似ています。some() では、配列要素の 1 つが true である判定関数を呼び出している限り、true を返します。