[解決済み】JavaScriptのforeachループで連想配列オブジェクトを処理する。
2022-04-12 10:51:11
質問
JavaScript の連想配列オブジェクトに対して、for-each ループが反復処理されないのはなぜですか?
// Defining an array
var array = [];
// Assigning values to corresponding keys
array["Main"] = "Main page";
array["Guide"] = "Guide page";
array["Articles"] = "Articles page";
array["Forum"] = "Forum board";
// Expected: loop over every item,
// yet it logs only "last" assigned value - "Forum"
for (var i = 0; i < array.length; i++) {
console.log(array[i]);
}
jQuery
each()
が参考になると思います。
https://api.jquery.com/jQuery.each/
解決方法は?
その
.length
プロパティは、数値インデックス (キー) を持つプロパティのみを追跡します。 あなたはキーに文字列を使っています。
できるようになります。
var arr_jq_TabContents = {}; // no need for an array
arr_jq_TabContents["Main"] = jq_TabContents_Main;
arr_jq_TabContents["Guide"] = jq_TabContents_Guide;
arr_jq_TabContents["Articles"] = jq_TabContents_Articles;
arr_jq_TabContents["Forum"] = jq_TabContents_Forum;
for (var key in arr_jq_TabContents) {
console.log(arr_jq_TabContents[key]);
}
安全のために、このようなループでは、どのプロパティも予期しない継承の結果でないことを確認するのがよいでしょう。
for (var key in arr_jq_TabContents) {
if (arr_jq_TabContents.hasOwnProperty(key))
console.log(arr_jq_TabContents[key]);
}
編集
- ということに注意するのが今となっては良いのかもしれません。
Object.keys()
関数は、モダンブラウザや Node などで利用できます。この関数は、オブジェクトの "own" キーを配列として返します。
Object.keys(arr_jq_TabContents).forEach(function(key, index) {
console.log(this[key]);
}, arr_jq_TabContents);
に渡されるコールバック関数は
.forEach()
が返す配列の中で、それぞれのキーとキーのインデックスを指定してコールされます。
Object.keys()
. また、この関数が繰り返し実行される配列も渡されますが、この配列はあまり役に立ちません。
オブジェクト
. これは名前で直接アクセスすることもできますが、(私見ですが)明示的に渡したほうが少しはすっきりすると思いますので、第2引数を
.forEach()
- としてバインドされ、元のオブジェクトは
this
をコールバック内で使用します。(ただ、これは下のコメントで指摘されているのを見ました)。
関連
-
JavaScriptの関数この指摘の問題を説明
-
Vueのクラススタイルの使い方の詳細
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
vueのグローバルがscss(mixin)を導入。
-
JavaScriptの配列共通メソッド解説
-
Vueのフィルタの説明
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?
-
HTML5 LocalStorage ローカルストレージとセッションストレージの使用法
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules