前提・実現したいこと
質問よろしくお願い致します。
以下jQueryにおいて、オブジェクトが勝手に置き換わる原因と解決策を知りたいです。
発生している問題・エラーメッセージ
以下 postArgs を見ると、apple の kind に b が二つ入ってしまいます。
ここは a と b を入れたいです。
(画像のように置き換わることなく、postArg の値を postArgs に入れたいです。)
該当のソースコード
実行サンプル:https://jsfiddle.net/o1uyLkxv/
jQuery
1console.log('start'); 2 3const filterd = { 4 "apple" : ["a","b"], 5 "banana": ["d"], 6 "cherry": ["e", "f"], 7 "durian": ["g","h"] 8}; 9 10let postArgs = []; 11$.each(filterd, function(service, kinds) { 12 let postArg = {}; 13 kinds.forEach( kind => { 14 postArg.service = service; 15 postArg.kind = kind; 16 postArg.word = 'あ'; 17 console.log( 'postArg =', postArg ); 18 postArgs.push( postArg ); 19 }); 20}); 21 22console.log( 'postArgs =', postArgs ); 23 24console.log('finish');
試したこと
上記のようにコンソールを出し、postArgs 手前の postArg を個別に出しました。画像の通りです。
すると、その時点では a になっているのに、postArgs の時点で勝手にbに置き換わるという現象なのだとわかりました。
しかし、コンソールと push の間にはなんの処理もないために、なぜ勝手に置き換わるのか…全く分からないです。
コンソールに表示されている postArg が push される。という理解なのですが、何か間違っているのでしょうか?
さらに、よりシンプルに以下状況での再現を試みましたた。
ですが、これはきちんと a と b が入りまして、原因を探る手立てが見つけられません。
こちらの皆様のお知恵を拝借できましたら幸いです。
jQuery
1let postArgsTest= []; 2for(var i=0; i<2; i++){ 3 let postArg = {}; 4 if( i === 0 ){ 5 postArg = { service: "apple", kind: "a", word: "あ" }; 6 }else{ 7 postArg = { service: "apple", kind: "b", word: "あ" }; 8 } 9 postArgsTest.push(postArg); 10} 11console.log( 'postArgsTest =', postArgsTest ); 12
補足情報(FW/ツールのバージョンなど)
jQuery3.4.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/12 03:22