3

JavaScriptでループを実行しているときに、複数のオブジェクトを含むローカルストレージを作成できるかどうかは誰にもわかりませんか?

現時点では、私のコードは次のようになります。

var albums = '';
var album_list = '';

$.each(data, function(i,item){
   var name = item.name;
   albums += '<li>'+item.name+'</li>';

   var album_content = {name: item.name, uid: 1};
   var album_content = album_content+',';

   album_list += album_content;


});

var album_list = '['+album_list+']';   
localStorage.setItem("albums", JSON.stringify(album_list));
var albums_l = JSON.parse(localStorage.getItem("albums"));

$.each(albums_l, function(i,item){
   console.log(item.name);
});

しかし、それは私にエラーを与えます。誰もがこれに対するより良い解決策を持っているので、私は1つのローカルストレージとその中のすべてのデータを持っていますか?

4

2 に答える 2

6

コード内でオブジェクトと文字列を混在させています。Youralbum_contentはループ内でオブジェクト ( {name: item.name, uid: 1}) として初期化されます。次の行では、カンマを追加して文字列として扱います。

全体として、配列を使用してすべてのオブジェクトを収集します。なんらかの方法でエミュレートしようとするのではなく、ネイティブ オブジェクトを使用する方が (ほぼ) 常に優れています。

代わりにこのコードを試してください。

var albums = '';
var album_list = [];

$.each(data, function(i,item){
   var name = item.name;
   albums += '<li>'+item.name+'</li>';

   var album_content = {name: item.name, uid: 1};
   // remove that line completly
   // var album_content = album_content+',';

   album_list.push( album_content );

});


localStorage.setItem("albums", JSON.stringify( album_list ));
var albums_l = JSON.parse(localStorage.getItem("albums"));

$.each(albums_l, function(i,item){
   console.log(item.name);
});
于 2012-04-27T08:29:11.433 に答える
1

どうしたの:

var albums = '';
var album_list = '';

$.each(data, function(i,item){
   var name = item.name;
   albums += '<li>'+item.name+'</li>';

   var album_content = {name: item.name, uid: 1};

   // at this point album_content is an object.. so it will be this string afterwards: "[object Object],"
   var album_content = album_content+',';

   album_list += album_content; //you're adding "[object Object],"


});

// album_list will now look like this: '["[object Object],[object Object],"]'
var album_list = '['+album_list+']';
localStorage.setItem("albums", JSON.stringify(album_list));
var albums_l = JSON.parse(localStorage.getItem("albums"));

$.each(albums_l, function(i,item){
   console.log(item.name);
});

正しい方法:

var albums = '';
var album_list = [];

$.each(data, function(i,item){
   var name = item.name;
   albums += '<li>'+item.name+'</li>';

   var album_content = {name: item.name, uid: 1};

   album_list.push(album_content);


});

localStorage.setItem("albums", JSON.stringify(album_list));
var albums_l = $.parseJSON(localStorage.getItem("albums"));

$.each(albums_l, function(i,item){
   console.log(item.name);
});
于 2012-04-27T08:31:02.183 に答える