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

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

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

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

jQuery

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

Q&A

解決済

1回答

3471閲覧

jQueryで、下の処理が実行された値が、上の処理に反映してしまう問題について

natsunoomoide

総合スコア8

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/09/20 20:36

前提・実現したいこと

jQueryで、配列を更新する作業に取り組んでいます。

該当のソースコードで、ajax()の中にあるarrNewをコンソールに出すときに、[3]だけを表示したいです。

発生している問題・エラーメッセージ

ajax()の中にあるarrNewをご覧ください。

この行はupdate()より上なのに、update()によってmergeが実行されて[3,2,1]になってしまうのが問題です。

ここはupdate()実行前の値として、[3]が取得されるハズではないのでしょうか?

エラーはありません

該当のソースコード

sample : https://jsfiddle.net/z57m8xpk/

jQuery

1function get(){ 2 var arr = [2,1]; 3 console.log('get() - arr : ', arr ); 4 return arr; 5} 6 7function ajax(){ 8 var responce = '[3]'; 9 console.log('ajax() - responce', responce ); 10 const arrNew = JSON.parse( responce ); 11 console.log('ajax() - arrNew【問題の値】 :', arrNew ); // [3]のハズでは? 12 update( 'merge', arrNew ); 13} 14ajax(); 15 16function update( way, arrNew ){ 17 18 // 現状のデータ 19 let arr = get(); 20 arr = (arr) ? arr : []; 21 console.log('update() - data : ', arr ); 22 23 // 追加 24 if( way=='unshift' ){ 25 arr.concat( arr.unshift(arrNew) ); 26 console.log('update() - unshift - data : ', arr ); 27 } 28 29 // 削除 30 else if( way=='shift' ){ 31 arr.concat( arr.shift(arrNew) ); 32 console.log('update() - shift - data : ', arr ); 33 } 34 35 // 上に追加 36 else if( way=='merge' ){ 37 console.log('update() - merge - data : ', $.merge( arrNew, arr ) ); 38 } 39 40} 41

試したこと

update()をコメントアウトすれば[3]が取得されます。

補足情報(FW/ツールのバージョンなど)

各ブラウザで同じ問題が生じます。

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

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

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

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

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

querykuma

2019/09/20 22:28

[3,2,1]になってしまうとおっしゃっているのはデベロッパーツールですか?
guest

回答1

0

ベストアンサー

ここはupdate()実行前の値として、[3]が取得されるハズではないのでしょうか?

[3]が取得されています。配列以外に変換してから表示すればわかります。

[3,2,1]が取得されるとおっしゃっているのはデベロッパーツールのConsoleの表示ですか?

デベロッパーツール

iの箇所に表示される「Value below was evaluated just now.」は「以下の値は、たった今評価されました」という意味です。
arrNewの三角をクリックして(たった今)arrNewが評価されました。

たった今評価するとupdate()実行後に評価した値の[3,2,1]が表示されます。

投稿2019/09/20 22:27

querykuma

総合スコア777

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

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

natsunoomoide

2019/09/21 09:51

ありがとうございます。知りませんでした。当時の値を見たいのに更新されてしまうとは、不便に感じませんか?なぜそんな仕様に…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問