ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript での新しい Array メソッドの実装の紹介 5_javascript スキル

JavaScript での新しい Array メソッドの実装の紹介 5_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 17:56:23961ブラウズ
复制代码代码如下:

/*!
* jLip JavaScript Library v0.1
*
* 著作権 2012、Lip2up (lip2up@qq.com)
* 無料使用のみ、ライセンスなし
*/
(関数() {
function extend(target, props) {
for (var m in props) {
if (target[m] === 未定義) target[m] = props[m]; 🎜>}
}
var fns = { each: 1, some: 2, forEach: 3, map: 4, filter: 5 },
reduceError = '初期値のない空の配列の削減' ;
関数 each(fn, _this, kind) {
var len = this.length, ret = kind == fns.filter ? []
: kind == fns.map ? : 未定義,
find = kind == fns.some, i, v;
for (i = 0; i < len; i ) {
if (this[i] !== 未定義) {
v = fn.call(_this, this[i], i, this);
switch (kind) {
case fns.every:
case fns.some:
if (v === 検索) 検索を返します。
ret[i] = v; (v === true) ret[ret.length] = this[i];
break
}
}
return kind >= fns.forEach; !find;
}
関数 reduce(fn, init, right) {
var len = this.length, i, prev, inc = right ? -1:1;
if (len == 0 && init === unknown)
throw TypeError(reduceError);
for (i = right ? len - 1 : 0, prev = init;
prev === 未定義 && (right ? i >= 0 : i < len);
i = inc) {
前 = これ[i];
}
if (prev === 未定義 && i == (right ? -1 : len))
throw TypeError(reduceError);
for (; (right ? i >= 0 : i if (this[i] !== 未定義)
prev = fn(prev, this [i]、私、これ);
}
前に戻る;
}
extend(Array.prototype, {
every: function(fn, _this) {
return each.call(this, fn, _this, fns.every);
},
some: function(fn, _this) {
return each.call(this, fn, _this, fns.some)
},
forEach: function(fn, _this) {
return each.call(this, fn, _this, fns.forEach);
},
map: function(fn, _this) {
return each.call(this, fn, _this, fns.マップ);
},
フィルター: function(fn, _this) {
return each.call(this, fn, _this, fns.filter);
},
reduce: 関数(fn, init) {
return reduce.call(this, fn, init);
},
reduceRight: function(fn, init) {
return reduce.call(this, fn, init、true);
}
});
})();

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。