JavaScriptのプロパティ(オブジェクト)として以下の連番が振られたデータがあるときに、for文のような繰り返し処理を使ってまとめて内容を取得したいのですが、どのようにコードを書くことで実現できるでしょうか?
よろしくお願いいたします。
JavaScript
1var test = { 2 'koumoku_1': 'あああ', 3 'koumoku_2': 'いいい', 4 'koumoku_3': 'ううう' 5} 6 7for (var i = 0; i < test.length; i++) { 8 console.log(test.koumoku_[i + 1]); // これではデータにアクセスできない 9} 10 11// 現状、同じコードを連番分だけ複製させて処理させていますが、シンプルなコードを実現したいです 12console.log(test.koumoku_1); 13console.log(test.koumoku_2); 14console.log(test.koumoku_3);
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答6件
0
オブジェクトはfor-in構文でループ可能です.
JavaScript
1var test = { 2 'koumoku_1': 'あああ', 3 'koumoku_2': 'いいい', 4 'koumoku_3': 'ううう' 5} 6for (var i in test) { 7 console.log(test[i]); 8}
NOTE:
Object.entries
メソッドと組み合わせるとfor-of構文が使えるようになります.
JavaScript
1var test = { 2 'koumoku_1': 'あああ', 3 'koumoku_2': 'いいい', 4 'koumoku_3': 'ううう' 5} 6for(var [key, val] of Object.entries(test)){ 7 console.log(val); 8}
NOTE:
一般のオブジェクトにはlength
プロパティがありませんから, 普通のループ処理はできません. もしも数値部が連続しており, その範囲が判っているのであれば次のように記述することが可能です.
JavaScript
1var test = { 2 'koumoku_1': 'あああ', 3 'koumoku_2': 'いいい', 4 'koumoku_3': 'ううう' 5} 6var [begin, end] = [1, 3]; 7for (var i = begin; i <= end; i++) { 8 console.log(test[`koumoku_${i}`]); 9}
投稿2018/04/11 00:01
編集2018/04/11 00:19総合スコア4756
0
js
1var test = { 2 'koumoku_1': 'あああ', 3 'koumoku_2': 'いいい', 4 'koumoku_3': 'ううう' 5} 6 7$.each(test,function(i,k){ 8 console.log(i+' : '+k); 9});
簡単にまわしてみました。
投稿2018/04/10 23:58
編集2018/04/11 00:50総合スコア355
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
0
今回の質問のケースの場合はobjectを列挙するかたちで問題なさそうですが、一応、ObjectとMapでは列挙のされ方に違いがあるので、両パターンを参考までに置いておきます。
Object
const obj = { [Symbol('symbol')]: 'symbol', koumoku: 'あああ', koumoku_1: '111', koumoku_2: '222', koumoku_3: '333', '3': 'さん' } for ( let key in obj) { console.log(obj[key]) } // 以下ログの結果 // さん // あああ // 111 // 222 // 333
ポイント
- 挿入順に列挙される保証はない
- Symbolは
for in
で列挙されない 1
や"1"
など数字っぽいkeyが'aaa'のような文字列より順序が優先される(言語仕様というより、これはモダンブラウザの実装による)
Map
const dic = new Map([ [Symbol(), 'symbol'], ['koumoku', 'あああ'], ['koumoku_1', '111'], ['koumoku_2', '222'], ['koumoku_3', '333'], ['3', 'さん'] ]) // これでもOK // console.log(...dic.values()) for (let [key, value] of dic) { console.log(value); } // 以下ログの結果 // symbol // あああ // 111 // 222 // 333 // さん
ポイント
- Symbolも列挙されるし、また、全て挿入順に列挙される
投稿2018/04/11 01:02
編集2018/04/11 01:06総合スコア2415
0
すでに変数の連番についてはずばり回答が揃ったようなので
連番だけが目的ならこうする手もあるでしょう。
javascript
1var test = { 2 'koumoku':[ 3 'あああ', 4 'いいい', 5 'ううう', 6 ], 7}; 8 9for (var i = 0; i < test.koumoku.length; i++) { 10 console.log(test.koumoku[i]); 11} 12console.log(test.koumoku[0]); 13console.log(test.koumoku[1]); 14console.log(test.koumoku[2]);
※連番=参照に順番をもたせたいなら配列で指定し、
連番の最初は1ではなく0が処理しやすい
蛇足
koumokuにつく数値が何から始まって何でおわるかわからなかったり
ゴミデータがあったりする場合も想定するとこう
javascript
1var test = { 2 'koumoku_102': 'いいい', 3 'koumoku_103': 'ううう', 4 'koumoku_101': 'あああ', 5 'gomi': 'えええ', 6} 7 8var num=Object.keys(test).map(function(v){ 9 return (r=v.match(/koumoku_([0-9]+)/))?parseInt(r[1]):null; 10}).filter(function(v){ 11 return v!==null; 12}).sort(); 13 14for (var i = 0; i < num.length; i++) { 15 console.log(test["koumoku_"+num[i]]); 16}
投稿2018/04/11 00:25
編集2018/04/11 00:39総合スコア115870
0
ベストアンサー
Javascript
1for (var i = 0; i < test.length; i++) 2{ 3 console.log(test["koumoku_" + (i + 1)]); // こんなんで行けたような遥かな記憶… 4}
投稿2018/04/10 23:59
![退会済みユーザー](https://ddjkaamml8q8x.cloudfront.net/profileImages/deletedUser/icnUserSample.jpeg)
退会済みユーザー
総合スコア0
0
これでいけませんでしょうか。
JavaScript
1for (var i = 0; i < test.length; i++) { 2 console.log(test["koumoku_" + (i + 1)]); 3}
投稿2018/04/10 23:59
編集2018/04/11 00:01総合スコア1947
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/12 00:49