[解決済み] JavaScriptで "arguments "オブジェクトを配列に変換するにはどうすればよいですか?
質問内容
は
arguments
JavaScript のオブジェクトは奇妙なもので、ほとんどの状況で配列のように振る舞いますが、それは
実際に
配列オブジェクトです。これは
本当に全く別のもの
の便利な機能は持っていません。
Array.prototype
のように
forEach
,
sort
,
filter
および
map
.
引数オブジェクトから新しい配列を作るのは、単純なforループを使えば些細なことです。例えば、この関数は引数をソートします。
function sortArgs() {
var args = [];
for (var i = 0; i < arguments.length; i++)
args[i] = arguments[i];
return args.sort();
}
しかし、これは単に非常に便利なJavaScriptの配列関数にアクセスするために行わなければならない、かなり哀れなことです。標準ライブラリを使ってこれを行うビルトインの方法はないのでしょうか?
解決方法は?
レストパラメータを使用したES6
ES6を使用できる方は使用できます。
function sortArgs(...args) {
return args.sort(function (a, b) { return a - b; });
}
document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();
にあるように リンク
<ブロッククオートrestパラメータ構文では、不特定多数の引数を配列として表現することができます。
が気になる方は
...
という構文があり、これは
スプレッド演算子
をご覧ください。
こちら
.
Array.from()を使ったES6
使用方法 Array.from :
function sortArgs() {
return Array.from(arguments).sort(function (a, b) { return a - b; });
}
document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();
Array.from
Array-like または Iterable オブジェクトを Array インスタンスに単純に変換します。
ES5
を使用することができます。
Array
's
slice
関数で引数オブジェクトを指定すると、それを標準的なJavaScriptの配列に変換してくれます。Arrayのプロトタイプを使って手動で参照する必要があるだけです。
function sortArgs() {
var args = Array.prototype.slice.call(arguments);
return args.sort();
}
なぜこれが有効なのか?さて、以下はその抜粋です。 ECMAScript 5 のドキュメントそのもの :
ノート : は
slice
関数は意図的に一般的なものです。 これ の値はArrayオブジェクトでなければなりません。したがって、他の種類のオブジェクトに転送して、メソッドとして使用することができます。の有無はslice
関数をホストオブジェクトにうまく適用できるかどうかは、実装に依存する。
そのため
slice
があるものはすべて動作します。
length
プロパティがあり、その
arguments
が便利です。
もし
Array.prototype.slice
は口数が多いので、配列リテラルを使って少し省略することができます。
var args = [].slice.call(arguments);
しかし、私は前者の方がより明示的だと感じることが多いので、代わりに前者を選びます。配列リテラル表記を乱用すると、ハチャメチャな感じがするし、見た目も変だ。
関連
-
fetch ネットワークリクエストラッパーの説明例
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
vueが定義するプライベートフィルタと基本的な使い方
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
要素ツリー制御によるvueTreeテーブル
-
vueにおけるfilterの適用シーンについて解説します。
-
Vueの「データを聴く」原則を解説
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?
-
[解決済み] printf/String.Formatに相当するJavaScriptの機能
-
[解決済み] Array.prototype.slice.call`はどのように機能するのですか?