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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

558閲覧

jQueryでオブジェクトに値を追加すると上書きされてしまう

narutona

総合スコア23

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/07/12 11:17

編集2019/07/12 11:52

###実現したいこと
jQueryで下記「ini」の先頭に「add」を追加したいです。

jquery

1// 元のデータ 2let ini = '{"data":[{"name":"B","num":2},{"name":"A","num":1}]}'; 3 4// 追加したいデータ 5let add = '{"name":"C","num":3}';

つまりほしいデータはこちらです。

jQuery

1// ほしいデータ 2{"data":[{"name":"C","num":3},{"name":"B","num":2},{"name":"A","num":1}]}

###試したこと
ですが下記だとBの部分が消えて、AとCだけになってしまいました。

jquery

1// 元のデータ 2let ini = '{"data":[{"name":"B","num":2},{"name":"A","num":1}]}'; 3 ini = JSON.parse( ini ); 4 5// 追加したいデータ 6let add = '{"name":"C","num":3}'; 7 add = JSON.parse( add ); 8 9// 下記だとBが消えてしまう 10ini['data'][0] = add; 11console.log( ini );

どのようにすれば正しく追加できますでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

js

1// 元のデータ 2let ini = '{"data":[{"name":"B","num":2},{"name":"A","num":1}]}'; 3 ini = JSON.parse(ini); 4 5// 追加したいデータ 6let add = '{"name":"C","num":3}'; 7 add = JSON.parse(add); 8 9// 「ini」の先頭に「add」を追加 10ini.data.concat(ini.data.unshift(add)); 11console.log(ini); 12// => {"data":[{"name":"C","num":3},{"name":"B","num":2},{"name":"A","num":1}]}

投稿2019/07/12 11:57

yasutomi

総合スコア2937

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

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

narutona

2019/07/12 12:07

できました。unshift、ありがとうございます。逆にiniからBを削除するにはどうすればいいでしょうか?unshiftの逆のようなものがあったら教えていただけませんでしょうか?
narutona

2019/07/12 12:14

削除はunshiftの逆というか、concatの逆でしょうか?いずれも初見でよくわかってません…
narutona

2019/07/12 12:14

すみません入れ違いでした。shiftというのがあるのですね。ありがとうございます。大変勉強になりました。
guest

0

キーが指定されていない配列は0から始まります。
なので、Bが上書きされるのは正しい動作です。

先頭に追加する場合は unshift()
末尾に追加する場合は push()

を使いましょう

投稿2019/07/12 12:02

m.ts10806

総合スコア80850

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

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

narutona

2019/07/12 12:09

先頭と末尾に適した処理があるのですね。ありがとうございます。すみませんがもしよろしければ「なので」の前をご説明をもう少し詰めていただけませんでしょうか。 どの配列が0から始っていて、なぜBが上書きされるのか、まだイメージできない状態です。
m.ts10806

2019/07/12 12:14

もっと簡単なコードで試すと良いですよ。 let a = ['a','b','c']; console.log(a[0]); console.log(a[1]); console.log(a[2]); [] 内が配列。 左から0から順番
narutona

2019/07/12 12:23

どうもありがとうございます。いろいろ試してみます。また機会がありましたら宜しくお願い致します。
m.ts10806

2019/07/12 12:25

あれ。詰めるんじゃなかったんでしょうか・・・ たぶんここ曖昧にしておくとオブジェクトも配列もちゃんと扱えるようにはならないと思います。 せめて回答に貼ったドキュメントの見方くらいは覚えてもらいたいのですけど・・・(辞書代わりになりますし)
narutona

2019/07/12 12:38

詰めたいです!笑 「試してごらん」の意図がよくわかっていなかったので、「勝手にがんばれ」かと勘繰って、話を終わらせてしまいました。すみません。 ドキュメントの見方というか、そこにあるpushとshiftの使い方は今回の例に限っていえば掴めました。 どうもありがとうございます。
narutona

2019/07/12 12:47 編集

で、詰めて頂きたいご説明についてですが… >キーが指定されていない配列は0から始まります。 なので、Bが上書きされるのは正しい動作です。 まず「キーが指定されていない配列」とは、下記のことですよね? '{"data":[{"name":"B","num":2},{"name":"A","num":1}]}' の中の [{"name":"B","num":2},{"name":"A","num":1}] のこと そしてこの「Bが0から始まっている(0の位置にBがある)」というのが、「>キーが指定されていない配列は0から始まります」という意味ですよね。 不思議なのは、「>なので、Bが上書きされるのは正しい動作」の部分です。 なぜ「追加」でなく「上書き」になってしまうのでしょうか? たとえば var current = {}; current['new'] = "新しい値"; とすると「追加」してくれますよね。 なのにどうして、質問の方は「上書き」になってしまうんだろう。って思ったために「詰めてほしい」とお願いした感じでした。 まぁ「そういうもんだから納得しろ」ですよね。笑
narutona

2019/07/12 12:45

あっいえ、自分で書いてて納得できました。 var current = {}; current['new'] = "新しい値"; で値が追加されるのは、まだnewに値がないからですよね。 もしあれば上書きされるわけですもんね。 すみません。お騒がせしました。
m.ts10806

2019/07/12 12:47

ご自身で書いてますよ。 ini['data'][0] = add; 配列の0番目指定でaddを代入
narutona

2019/07/12 12:48

と、いうことですよね。その書き方の意味がわかっていませんでした。おかげ様でわかりました。どうもありがとうございました。
m.ts10806

2019/07/12 12:48

理解につながったようで何よりです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問