teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

試したことやバージョンなど少し追記しました

2019/10/19 05:06

投稿

gochiso
gochiso

スコア4

title CHANGED
File without changes
body CHANGED
@@ -4,9 +4,9 @@
4
4
  クッキーにはこのように配列を(そのJSON.stringify版を)保存したいです。
5
5
  [ { id: 1, name: 'a' }, { id: 1, name: 'a' } ]
6
6
 
7
- そしてこの保存において、何度目のクリックであっても配列を保存したいのですが、、、
7
+ そしてこの保存において、何度目のクリックであっても配列を保存したいのですが、次の問題が発生します。
8
8
 
9
- ### 発生している問題・エラーメッセージ
9
+ ### 発生している問題
10
10
  jQuery.cookieで配列を保存すると、1回目に勝手にオブジェクトになり、2回目以降に配列になるという問題に遭遇しました。
11
11
 
12
12
  解決方法をご指南頂けましたら幸いです。
@@ -31,7 +31,7 @@
31
31
  </body>
32
32
  </html>
33
33
  ```
34
- 下記6行目のコンソール表示は配列のかぎかっこ(これ→[])があるのに、行目で勝手にオブジェクトに変換されてしまいます。この変換は1回目のクリックだけで、2回目以降はきちんと配列が保存され、オブジェクトになることはありません。
34
+ 下記6行目のコンソール表示は配列のかぎかっこ(これ→[])があるのに、7行目で勝手にオブジェクトに変換されてしまいます。この変換は1回目のクリックだけで、2回目以降はきちんと配列が保存され、オブジェクトになることはありません。
35
35
  ```
36
36
  $(document).on('click','button', function(e){
37
37
  const NewHistory = { id: 1, name: 'a' };
@@ -41,4 +41,17 @@
41
41
  console.log(HistoryAry); // ここは配列なのに
42
42
  $.cookie( 'HistoryAry', HistoryAry, { expires: 365, path:'/' } ); // ここでオブジェクトになる
43
43
  });
44
- ```
44
+ ```
45
+
46
+ ###試したこと
47
+ まず、HisToryAryを次のように変えても変化なしでした。
48
+ ```
49
+ //let HistoryAry = $.cookie( 'HistoryAry' ) ? JSON.parse( $.cookie( 'HistoryAry' ) ) : [];
50
+ let HistoryAry = JSON.parse( $.cookie( 'HistoryAry' ) ? $.cookie( 'HistoryAry' ) : '[]' );
51
+ ```
52
+ また、HisToryAryの初期化の際に次のように空のオブジェクトをいれてみましたところ、1回目のクリックでも配列が保存されました。(もちろん不要な空のオブジェクトも保存されることになるのでこれはいけません)
53
+ ```
54
+ let HistoryAry = $.cookie( 'HistoryAry' ) ? JSON.parse( $.cookie( 'HistoryAry' ) ) : [{}];
55
+ ```
56
+ ###バージョン
57
+ 上で使用中のjquery.cookieは1.4.1です。