JavaScriptの勉強中です。
初めての質問です。
以下のようにオブジェクトからプロパティと値を取り出すにはどのようにするのがいいでしょうか?
let a; let b; let c; let o = {a: 1, b: 2, c: 3};
ここから
console.log("a= " + a); //a= 1 console.log("b= " + b); //b= 2 console.log("c= " + c); //c= 3
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
js
1let o = {a: 1, b: 2, c: 3}; 2let{a,b,c} = o;
let
を使っているから、分割代入を使っていいんですよね?
投稿2018/02/14 00:22
総合スコア36115
0
オブジェクトからプロパティと値を取り出すにはどのようにするのがいいでしょうか?
オブジェクトはそれそのものがインデックス付きの本みたいなものです。
どうしてもバラバラにすべきケースを除いて、オブジェクトのまま使うのが分かりやすいと思います。
JavaScript
1// オブジェクトとプロパティの同時宣言 2let o = {a: 1, b: 2, c: 3}; 3 4// 各プロパティから値を取り出したい 5console.log(o.a); // 1 6console.log(o.b); // 2 7console.log(o.c); // 3 8 9// 各プロパティへの値を格納したい 10o.a = 10; 11o.c = 30; 12console.log(o); // {a: 10, b: 2, c: 30}
質問文を素直に解く
プロパティから値を取り出す方法さえわかれば楽勝です。
JavaScript
1let a; 2let b; 3let c; 4let o = {a: 1, b: 2, c: 3}; 5 6a = o.a; 7b = o.b; 8c = o.c; 9 10console.log("a= " + a); //a= 1 11console.log("b= " + b); //b= 2 12console.log("c= " + c); //c= 3
ES2015という新しいJavaScriptのバージョンの書き方では
オブジェクトの分割代入という書き方がサポートされました。
これにより変数a, b, cの3つを一気に宣言できます。
JavaScript
1let o = {a: 1, b: 2, c: 3}; 2let {a, b, c} = o; 3 4console.log("a= " + a); //a= 1 5console.log("b= " + b); //b= 2 6console.log("c= " + c); //c= 3
最初の書き方より随分鮮やかになりましたね。
これはIE11やopera等の一部のブラウザでは動作しませんので注意してください。
(Babelというツールがあり、ES2015専用のコードを上の愚直なやり方に変換する事ができます)
しかし1個ずつ書くというのは変数o
の構造が変化した時に
存在しないプロパティを読み込もうとしてバグの原因になります。
そこで、一般的にはmaisumakunさんのような手法が用いられます。
投稿2018/02/14 01:19
総合スコア21158
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/14 02:28
2018/02/14 04:38
0
for-in
、もしくはObject.keys
を使いましょう。
javascript
1// for-inのパターン 2let o = {a: 1, b: 2, c: 3}; 3for(const key in o) { 4 console.log(key + '= ' + o[key]); 5} 6 7// Object.keysのパターン 8// 回すのをセットにしなくても、キーの配列が取れるので便利 9Object.keys(o).forEach(key => { 10 console.log(key + '= ' + o[key]); 11});
投稿2018/02/13 23:26
総合スコア145184
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/13 23:56
2018/02/14 00:30
2018/02/14 01:41
2018/02/14 01:47
2018/02/14 04:33
0
この場合にForが使えないですね。
下記の方法しかないと思います。
let o = {a: 1, b: 2, c: 3}
let { a, b, c } = o
Constも使えます。
const o = {a: 1, b: 2, c: 3}
const { a, b, c } = o
投稿2018/02/14 00:59
総合スコア172
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/14 02:06
2018/02/14 04:38
0
ベストアンサー
変数a、b、c自体の値をoの中身と同じ1、2、3にしたいです。
javascript
1var o = {a: 1, b: 2, c: 3}; 2for(var i in o){ 3this[i]=o[i]; 4} 5console.log([a,b,c]);
追記
上記グローバル変数の場合でしたのでローカル変数には適用されません
オブジェクト自体外部から受け取るわけではなさそうですし
キーを特定の文字に制限するならevalを使ってもいいでしょう。
javascript
1(function(){ 2 var a=0,b=0,c=0,d=0,e=0; 3 var o = {a: 1, b: 2, c: 3,"d=4;e":5}; 4 for(var i in o){ 5 eval(i+"="+o[i]); 6 } 7 /*キーを検証しないと変数が汚染される可能性がある*/ 8 console.log([a,b,c,d,e]); 9 10 var a=0,b=0,c=0,d=0,e=0; 11 for(var i in o){ 12 /*日本語変数とか使わないかぎりこんな感じ*/ 13 if(i.match(/^[a-zA-Z_$][0-9a-zA-Z_$]*$/))eval(i+"="+o[i]); 14 } 15 console.log([a,b,c,d,e]); 16})(); 17
投稿2018/02/14 00:17
編集2018/02/14 03:15総合スコア114839
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/14 00:47
2018/02/14 04:41
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/14 01:09
2018/02/14 01:22
2018/02/14 01:49
2018/02/14 02:04
2018/02/14 02:17
2018/02/14 04:35
2018/02/14 04:41