質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

27717閲覧

Javascriptでのjsonの要素の追加について

gomengo

総合スコア51

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/10/25 02:31

Javascriptでjsonに要素を追加しようとしています。
下記のようなプログラムを書きました。

js

1var key, Hash, val, temp; 2 3Hash = [ 4 { 5 a: "a", 6 b: "b", 7 c: "c", 8 d: "d", 9 e: "e", 10 } 11]; 12 13temp = {f: "f"}; 14Hash.push(temp); 15 16for (key in Hash[0]) { 17 val = Hash[0][key]; 18 alert("key -> " + key + ", val -> " + val); 19}

tempの変数にオブジェクトを代入し、オブジェクトをjsonに追加しています。

しかし、forのループで回すと代入したオブジェクトがjsonに追加されていません。

原因としてどのようなことが考えられるのでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

JavaScript

1Hash = [ 2 { 3 a: "a", 4 b: "b", 5 c: "c", 6 d: "d", 7 e: "e", 8 } 9]; 10 11temp = {f: "f"}; 12Hash.push(temp);

このコードで出来上がる配列はこうです。

JavaScript

1[ 2 { 3 a: "a", 4 b: "b", 5 c: "c", 6 d: "d", 7 e: "e", 8 }, 9 { 10 f: "f", 11 } 12]

そして、以下のコードでforとして回されるのは…

JavaScript

1for (key in Hash[0]) {

この部分だけ、ということになります。

JavaScript

1{ 2 a: "a", 3 b: "b", 4 c: "c", 5 d: "d", 6 e: "e", 7 }

投稿2017/10/25 02:45

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

entriesを使ってみる

javascript

1var Hash = [{a:"a",b:"b",c:"c",d:"d",e:"e"}]; 2temp = {f: "x",g:"y",h:"z"}; 3Object.entries(temp).map(function(arr){Hash[0][arr[0]]=arr[1];}); 4console.log(Hash[0]); 5

投稿2017/10/25 03:04

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Hash.pushは中身のハッシュではなくて、外側の配列に働くので、{f: 'f'}Hash[1]に入ってしまいます。

オブジェクトに値を追加したい場合、Object.assign(IE11は未対応)、jQuery.extendなどの手段があります。

投稿2017/10/25 02:36

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

js

1Hash[0].f = 'f';

この 変数Hash は配列です

配列の0番目にオブジェクトが格納されて
Hash = [ (オブジェクト) ]という形になっています

push(temp)は
Hash = [ (オブジェクト), temp ]というふうになります

Hash[0] が (オブジェクト) です

js

1[] : 配列 2{} : オブジェクト 3 4[{}] <= 配列の0番目がオブジェクト 5[{}].push(temp)[{}, temp] 6[{}, temp] <= 配列の1番目がtemp 7 8オブジェクトにプロパティを追加するには 9obj = {a: 1, b: 2} 10obj.f = 'f'; 11-> obj = {a: 1, b: 2, f, 'f'}

投稿2017/10/25 03:00

編集2017/10/25 03:36
kimurayu

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Array.pushは要素の末尾に追加するもの
つまりHash.push(temp)を実行した結果、こうなってるわけね。

JavaScript

1Hash = [ 2 { 3 a: "a", 4 b: "b", 5 c: "c", 6 d: "d", 7 e: "e" 8 }, 9 { 10 f: "f" 11 } 12];

素直に書いた場合の解決方法はこう
最善解は本筋のスクリプトの兼ね合いもあってなんとも言えないから、色々工夫してね。

JavaScript

1var key, Hash, val, temp; 2 3Hash = [ 4 { 5 a: "a", 6 b: "b", 7 c: "c", 8 d: "d", 9 e: "e", 10 } 11]; 12temp = {f: "f"}; 13 14// 解1 15Object.keys(temp).forEach(function(key){ 16 Hash[0][key] = temp[key]; 17}); 18console.log(Hash[0]); 19// a: "a" 20// b: "b" 21// c: "c" 22// d: "d" 23// e: "e" 24// f: "f" 25 26// 解2 27Hash[0] = Object.assign({}, Hash[0], temp); 28console.log(Hash[0]); 29// a: "a" 30// b: "b" 31// c: "c" 32// d: "d" 33// e: "e" 34// f: "f"

投稿2017/10/25 02:53

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問