ホームページ ウェブフロントエンド jsチュートリアル JavaScriptプログラムにおけるArray配列オブジェクトの拡張関数例

JavaScriptプログラムにおけるArray配列オブジェクトの拡張関数例

Nov 28, 2016 pm 01:45 PM
array

文字列スペースの削除、配列の並べ替えなど、カスタム拡張関数を String、Function、Array のプロトタイプに追加することがよくあります。

今日は Array オブジェクトを拡張する方法に焦点を当てます

1。 .prototype

2. 独自のメソッドを使用して配列オブジェクトを拡張します

Array.prototype で直接展開します。DOM オブジェクト (document.getElementsByTagName('div') によって取得されるノードリストなど) では直接使用できません。

潔癖症の人向け 学生にとっては、元の生態環境も破壊しています: )

まず、配列を操作する yui のメソッドをいくつか見てみましょう。ここでは、単純にソース コードを削除して変更しました

(function(){

var YArray)。 ;

YArray = function(o,idx,arraylike){

var t = (arraylike) ? 2 : YArray.test(o),
l, a, start = idx ||
if (t) {
try {
return Array .prototype.slice.call(o, start); // Array ネイティブ メソッドを使用してアトムを JS 配列に変換します
} catch(e) {
a = [];
l = o.length;
for (; start< ;l; start++) {
a.push(o[start]);
}
return a;
}
} else {
return [o];
}

}

YArray.test = function(o) {

var r = 0;
if (o && (typeof o == 'オブジェクト' ||typeof o == '関数')) {
if (Object.prototype.toString.call(o) = == "[オブジェクト配列]") {
r = 1;
} else {
try {
if (('length' in o) && !o.tagName && !o.alert && !o.apply) {
r = 2;
}
} catch(e) {}
}
}
return r;
}

YArray.each = (Array.prototype.forEach) //まずブラウザがサポートしているかどうかを確認します。したがって、ネイティブ

関数 (a, f, o) {
Array.prototype.forEach.call(a || [], f, o || Y);
return YArray;
} :
function (a, f, o) {
var l = (a && a.length) || 0, i;
for (i = 0; i f.call(o || Y 、 a[i], i, a);
}
return YArray;
};

YArray.hash = function(k, v) {

var o = {}, l = k.length, vl = v && v.length, i;
for (i=0; iif (k[i]) {
o[k[i]] = (vl && vl > i) ? v[i] : true;
}
}

return o;

};

YArray.indexOf = (Array.prototype.indexOf) ?

function(a, val) {
return Array.prototype.indexOf. call(a, val) ;
} :
function(a, val) {
for (var i=0; iif (a[i] === val) ) {
return i;
}
}
return -1; //状況が見つかりません
};

YArray.numericSort = function(a, b) {

return (a - b);大きいものから小さいものへ、return (b - a); 大きいものから小さいものへ
};

YArray.some = (Array.prototype.some) ?

function (a, f, o) {
return Array.prototype.some.call (a, f, o );
} :
function (a, f, o) {
var l = a.length, i;
for (i=0; i if (f.call( o, a[i], i, a)) {
return true;
}
}
return false;
};

})();

Array ネイティブ メソッドを使用して変換します他の JS 配列への引数メソッド (Dom オブジェクトは許可されず、トラバーサルのみ)


Array.apply(null,arguments);

[].slice.call(arguments,0);
[].splice.call (arguments,0,arguments .length);
[].concat.apply([],arguments);
...


YArray 関数は配列オブジェクトだけでなく、nodeList オブジェクトも操作できます

YArray (document.getElementsByTagName("div "));
DOM オブジェクトをトラバースして配列に再構築します: )


a = [];

l = o.length;
for (; starta.push(o[ start]);
}
return a;


YArray.each

配列を走査し、関数が渡されると、走査ごとにコールバックが実行されます


YArray.each([1,2,3] ,function(item){

alert(item);// 3回実行、1,2,3
});


YArray.hash

配列はキーと値のペアに組み立てられ、json オブジェクトとして理解できます
YArray.hash(["a","b"],[1,2]);

YArray.indexOf

Returns (検索したいのはvalue) 配列内の値と同じインデックス値

YArray.indexOf([ 1,2],1)

YArray.numericSort
配列を小さい順に並べ替えます
[3, 1, 2].sort(YArray .nu​​mericSort);
YArray.some
配列内の要素が callBack 処理を通過するかどうか?存在する場合はすぐに true を返します。存在しない場合は false を返します


YArray.some([3, 1, 2], function(el){

return el < 4;
) })


配列に対する JavaScript 1.6 ~ 1.8 の拡張機能を見て、同じ機能を実装する方法を学びましょう

forEach
indexOf
lastIndexOf
map
some
reduce
reduceRight

配列.プロトタイプ。 Every

if (!Array.prototype.every)
{

Array.prototype.every = function(fun /*, thisp*/)

{
var len = this.length >>> ;
if (typeof fun != "function")
throw new TypeError();
var thisp = argument[1];
for (var i = 0; i {
if (i in this &&
!fun.call(thisp, this[i], i, this))
return false;
}
return true;
};
}


配列内のすべての要素が callBack によって処理されましたか?存在する場合は true を返し、そうでない場合はすぐに false を返します。これは、先ほど説明した YUI 関数とよく似ています:) この関数はまったく逆です。
Array.prototype.filter = function (block /*, thisp */) { //追加が簡単な、判定とフィルタリング用のフィルター

varvalues = [];

var thisp = argument[1];

for (var i = 0; i if (block.call(thisp, this[i]))
values.push(this[i]);戻り値;

};




使用法


var val=numbers.filter(function(t){

return t })alert(val);



forEachとindexOf、およびいくつかは参照できます上記の yui コード、いいえ、もう一度繰り返します
lastIndexOf とindexOf コードは似ています。端からたどるだけです

それでは、「map」について話しましょう



Array.prototype.map = function(fun /*, thisp* /) {

var len = this.length >>> 0;

if (typeof fun != "function")

throw new TypeError();

var res = new Array(len);
var thisp = argument[1];

for (var i = 0; i if (i in this)
res[i] = fun.call(thisp, this[i], i, this);
}
return res;
};




配列を走査し、関数を実行し、配列を反復します。各要素は callBack メソッドを実行するためのパラメーターとして使用され、callBack メソッドは各要素を処理し、最後に処理された配列
varnumbers = [1, 4, 9 ];
varroot =numbers.map(function(a){return a * 2});

Array.prototype.reduce



Array.prototype。 reduce = function(fun /*,Initial*/) {

var len = this.length >>>

if (typeof fun != "function")

throw new TypeError();

if (len == 0 && argument.length == 1)
throw new TypeError();

var i = 0;

if (arguments.length >= 2) {
var rv = argument[1];
} else {
do {
if (i in this) {
rv = this[i++];
break;
}
if (++i >= len)
throw new TypeError();
} while (true);
}
for (; i < len; i++) {
if (i in this)
rv = fun.call(null, rv, this[i], i, this);
}
return rv;
};




配列要素に指定された関数を順番に呼び出して、最終的に値を返します。つまり、指定された関数は戻り値を使用する必要があります

Array.prototype.reduceRight

右から左に名前を意味します。


Array.prototype.reduceRight = function(fun /*,Initial*/) {

var len = this.length >>> 0;
if (typeof fun != "function")

throw new TypeError();

if (len == 0 && argument.length = = 1)
throw new TypeError();

var i = len - 1;

if (arguments.length >= 2) {
var rv = argument[1];
} else {
do {
if (i in this) {
rv = this[i--];
break;
}
if (--i 新しい TypeError をスローします();
} while (true);
}
for (; i >= 0; i--) {
if (i in this)
rv = fun.call(null, rv, this[i], i, this);
}
return rv;
};




これらに加えて、使用したいメソッドを Array.prototype に追加できます
たとえば、一般的に使用される toString


Array.prototype.toString = function () {

return this.join('')
};


toJson、uniq、compact、reverse などを追加することもできます

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# の Array.Sort 関数を使用して配列を並べ替える C# の Array.Sort 関数を使用して配列を並べ替える Nov 18, 2023 am 10:37 AM

タイトル: Array.Sort 関数を使用して C# で配列を並べ替える例 本文: C# では、配列は一般的に使用されるデータ構造であり、多くの場合、配列を並べ替える必要があります。 C# には Array クラスが用意されており、このクラスには配列を簡単に並べ替えるための Sort メソッドがあります。この記事では、C# で Array.Sort 関数を使用して配列を並べ替える方法を示し、具体的なコード例を示します。まず、Array.Sort 関数の基本的な使用法を理解する必要があります。 Array.So

PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 PHP で array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法 Jun 26, 2023 pm 01:41 PM

PHP には、配列操作をより便利かつ高速にする強力な配列関数が多数あります。 2 つの配列を結合して連想配列にする必要がある場合、PHP の array_combine 関数を使用してこの操作を実行できます。この関数は、実際には、ある配列のキーを別の配列の値として新しい連想配列に結合するために使用されます。次に、PHP の array_combine 関数を使用して 2 つの配列を結合して連想配列にする方法を説明します。 array_comb について学ぶ

PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 PHPのarray_merge_recursive()関数を使用するシンプルで明確な方法 Jun 27, 2023 pm 01:48 PM

PHP でプログラミングする場合、多くの場合、配列をマージする必要があります。 PHP には、配列のマージを完了するための array_merge() 関数が用意されていますが、配列内に同じキーが存在する場合、この関数は元の値を上書きします。この問題を解決するために、PHP は配列をマージして同じキーの値を保持できる array_merge_recursive() 関数を言語で提供し、プログラム設計をより柔軟にします。配列マージ

PHPのarray_fill()関数の使い方の詳しい説明 PHPのarray_fill()関数の使い方の詳しい説明 Jun 27, 2023 am 08:42 AM

PHP プログラミングにおいて、配列は大量のデータを簡単に処理できる非常に重要なデータ構造です。 PHP は配列関連の関数を多数提供しており、array_fill() はその 1 つです。この記事では、array_fill() 関数の使い方と実際の応用におけるヒントを詳しく紹介します。 1. array_fill() 関数の概要 array_fill() 関数の機能は、同じ値で構成される指定された長さの配列を作成することです。具体的には、この関数の構文は次のとおりです。

PHP の array_change_key_case() 関数の使用方法の概要 PHP の array_change_key_case() 関数の使用方法の概要 Jun 27, 2023 am 10:43 AM

PHP プログラミングでは、配列は頻繁に使用されるデータ型です。 array_change_key_case() 関数など、多数の配列操作関数もあります。この関数は、配列内のキー名の大文字と小文字を変換して、データ処理を容易にすることができます。この記事では、PHP での array_change_key_case() 関数の使用方法を紹介します。 1. 関数の構文とパラメータ array_change_ke

Python で Array モジュールを使用する方法 Python で Array モジュールを使用する方法 May 01, 2023 am 09:13 AM

Python の配列モジュールは事前定義された配列であるため、標準のリストよりもメモリ内で使用するスペースがはるかに少なく、追加、削除、インデックス付け、スライスなどの要素レベルの操作を高速に実行することもできます。さらに、配列内のすべての要素は同じ型であるため、平均値、最大値、最小値の計算など、配列が提供する効率的な数値演算関数を使用できます。さらに、配列モジュールは、配列オブジェクトのバイナリ ファイルへの直接の書き込みと読み取りもサポートしているため、大量の数値データを処理する際の効率が向上します。したがって、大量の同種データを処理する必要がある場合は、Python の配列モジュールを使用してコードの実行効率を最適化することを検討してください。配列モジュールを使用するには、まず次のことを行う必要があります。

Java での ArrayStoreException 例外の解決策 Java での ArrayStoreException 例外の解決策 Jun 25, 2023 am 08:05 AM

Java 開発では、配列の利便性とパフォーマンス上の利点から、配列を使用して一連のデータを保存することがよくあります。ただし、配列を使用するプロセスでは、いくつかの例外が発生します。一般的な例外の 1 つは ArrayStoreException です。この例外は、互換性のないデータ型を配列に格納するとスローされます。この記事では、ArrayStoreExceptionとは何なのか、なぜ発生するのか、そしてその解決方法を紹介します。 1. 到着

Java での ArrayStoreException の一般的な原因は何ですか? Java での ArrayStoreException の一般的な原因は何ですか? Jun 25, 2023 am 09:48 AM

Java プログラミングでは、配列は重要なデータ構造です。配列は 1 つの変数に複数の値を格納できます。さらに重要なのは、インデックスを使用して各値にアクセスできることです。ただし、配列を操作しているときに、いくつかの例外が発生する場合があります。そのうちの 1 つは ArrayStoreException です。この記事では、ArrayStoreException 例外の一般的な原因について説明します。 1. 型の不一致 配列の作成時に要素の型を指定する必要があります。互換性のないデータ型を配列に格納しようとすると、

See all articles