1. スパース配列
指定した長さのスパース配列の作成は非常に簡単です:
> 🎜> > a[0]
未定義
これを反復処理すると、JavaScript はこれらのギャップをスキップすることがわかります。 >
コードをコピーします
コードは次のとおりです:
などのスパース配列が生成されます。 コードをコピーします
コードは次のとおりです:
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 :
[ 0, 1, 2 ]
マップと組み合わせて使用すると、配列全体を指定した値で埋めることができます。
コードをコピーします
翻訳者注: 他の言語では、数値の増加リストを生成する便利な方法があります。 Perl や Ruby、Python では 1..100 を使用するなど、 range(100) を使用して、特定のフィールドを繰り返す文字列を生成する必要があります。 Ruby と Python では、「a」*100 を使用できます。 Perl では "a"x100 を使用し、JavaScript では Array(100).join("a")
5. 関連記事
JavaScript での配列とオブジェクトの反復処理
(壁に囲まれた)
- Node.js でアンダースコアを試してみます(壁に囲まれています)