ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の疎配列と密配列 [翻訳]_javascript スキル

JavaScript の疎配列と密配列 [翻訳]_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 17:49:561221ブラウズ
1. スパース配列
指定した長さのスパース配列の作成は非常に簡単です:
コードをコピーコードは次のとおりです。

> 🎜> > a[0]
未定義


これを反復処理すると、JavaScript はこれらのギャップをスキップすることがわかります。 >

コードをコピーします

コードは次のとおりです:
> a.forEach(function (x, i) { console.log( i ". " x) }); > a.map(function (x, i) { return i }) [ , , ] 翻訳者注: があります。その他の状況



などのスパース配列が生成されます。 コードをコピーします

コードは次のとおりです:
2.

Brandon Benvie
は最近、
es-discuss 電子メール ディスカッション グループ
密な配列を作成するためのヒント
について言及しました:

コードをコピーします コードは次のとおりです:

> var a = Array.apply(null, Array(3)); >> ; a [ 未定義, 未定義, 未定義 ] 上記のステートメントは、実際には次と同等です:
Array(未定義, 未定義, 未定義)

しかし、表面的には、この配列と前のスパース配列の間に大きな違いはないようです:



コードをコピー


コードは次のとおりです:


> a.length
3 > a[0] 未定義 ただし、これらの配列要素を反復処理できるようになりました。また、各要素に値を再割り当てすることもできます。


コードをコピー


コードは次のとおりです。 :


> a.forEach(function (x, i) { console.log(i ". " x) }); 翻訳者注:実際、JavaScript には従来の配列はありません。すべての配列は実際にはオブジェクトですが、一部の「数値」属性と長さ属性は自動的に管理されます。より直接的に言うと、JavaScript の配列にはインデックスがまったくありません。 JavaScript の配列のインデックスは実際には文字列です。arr[1000"] = 1 の場合、arr.length は自動的に 1001 になります。このようなパフォーマンスの理由は、JavaScript のオブジェクトが文字列と任意の値の組み合わせであるためです。これは AWK と似ていることに注意してください。 [1]=1;print(a["1"])}'。おそらくこれは、
Brendan Eich
が JavaScript
を開発したときに多くの awk デザイン
を参照したためです。 ES6 にはすでに Java や他の言語と同様の Map 型があり、キーは任意の型の値を指定できます。
Map


3 を参照してください。トリック
メールには別のトリックも記載されていました:

コードをコピー コードは次のとおりです:


> Array.apply(null, Array(3)).map(Function.prototype .call.bind(Number))
[ 0, 1, 2 ] Copy Code


コードは次のとおりです。

Array .apply(null, Array(3)).map(
function (x,i,...) { return Number.call(x,i,...) })

x は call メソッドの最初のパラメータであり、Number 関数の this 値として使用されることに注意してください。この値には意味がなく、無視されるのと同じです。概要:
コードをコピー コードは次のとおりです:

Array.apply(null, Array(3)) .map(function (x,i) { return i })

翻訳者注:
コードをコピー コードは次のとおりです:

Array.apply(null, Array(3)).map(Function.prototype.call.bind(Number))
//Array.apply (null, Array(3)).map(Function.prototype.call,Number) と同等

カスタム関数を使用する方が明確ですが、カスタム関数は間違いなくネイティブ メソッドほど高速ではありません。 例:

コードをコピーします。 コードは次のとおりです。
var a = ["aaa " , " bbb" , " ccc "]
a.map(function(x) { return x.trim(); }); , 'bbb', 'ccc']
a .map(Function.prototype.call, String.prototype.trim) // ['aaa', 'bbb', 'ccc']

;
上記のマップメソッドを使用して各配列をトリミングします。ネイティブメソッドを使用して要素のスペースを理解するのは難しいですが、理解できない場合は、私が翻訳したMDNドキュメントを確認することができます。
Array.prototype.map()
4. 実際の目的は?
実際の運用では、上記の密な配列を作成する方法を使用すると、他の人がコードを読み取ることができなくなります。そのため、

_ などのツール関数にカプセル化する方が良いでしょう。 .range

:

コードをコピー コードは次のとおりです: > _.range(3)
[ 0, 1, 2 ]


マップと組み合わせて使用​​すると、配列全体を指定した値で埋めることができます。

コードをコピーします
コードは次のとおりです。 > { return "a" }) [ 'a ', 'a', 'a' ]
翻訳者注: 他の言語では、数値の増加リストを生成する便利な方法があります。 Perl や Ruby、Python では 1..100 を使用するなど、 range(100) を使用して、特定のフィールドを繰り返す文字列を生成する必要があります。 Ruby と Python では、「a」*100 を使用できます。 Perl では "a"x100 を使用し、JavaScript では Array(100).join("a")

5. 関連記事



JavaScript での配列とオブジェクトの反復処理
(壁に囲まれた)
  1. Node.js でアンダースコアを試してみます(壁に囲まれています)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。