ローカルストレージに値を保存し、後でリストとして表示するには、次のコードがあります。私が持っている問題はdisplayRecipes()です。レシピ名の値のみが表示され、その他はすべて未定義です。あなたが見ることができるように、私はすべてのレシピを最上位レベルのレシピ名とすべての他の値を以下のような "サブプロパティ"としてlocalStorage.recipesに保存します:{'recipeName:{' other values and properties '...}} 。 私はかなりJavaScriptに新しいので、私は '未定義'は、変数が正しく初期化されていないことを意味したと思った。 addNewRecipe()で初期化して割り当てていますが、それらを表示したいときにはすでにローカルストレージに保存されています。オブジェクトリテラルのプロパティを繰り返します
ご協力いただきありがとうございます。
function addNewRecipe() {
var recipeName = $('#recipeName').val();
var recipeType = $('#recipeType').val();
var recipePersonsCount = $('#recipePersonsCount').val();
var recipeTime = $('#recipeTime').val();
var recipeContents = $('#recipeContents').val();
var recipeInstructions = $('#recipeInstructions').val();
// Checks if recipes variable already exists
// If yes: get content, parse it, add new data to array and store it again
// If no: create new variable and store it
if (localStorage.recipes) {
var getRecipes = JSON.parse(localStorage.getItem('recipes'));
var newRecipe = getRecipes;
newRecipe[recipeName] = {'recipeType': recipeType, 'recipePersonsCount': recipePersonsCount,
'recipeTime': recipeTime, 'recipeContents': recipeContents,
'recipeInstructions': recipeInstructions};
localStorage.setItem('recipes', JSON.stringify(newRecipe));
} else {
var recipe = {};
recipe[recipeName] = {'recipeType': recipeType, 'recipePersonsCount': recipePersonsCount,
'recipeTime': recipeTime, 'recipeContents': recipeContents,
'recipeInstructions': recipeInstructions};
localStorage.setItem('recipes', JSON.stringify(recipe));
};
};
function getRecipes() {
var existingRecipes = JSON.parse(localStorage.getItem('recipes'));
return existingRecipes;
};
function displayRecipes() {
var recipes = getRecipes();
for (var key in recipes) {
if (!$('#rec').val()) {
$('#recipeList').add('<ul id="#rec">' + key + '</ul>').appendTo(document.body);
$('#rec').add('<li>' + key.recipeType + '</li>').appendTo(document.body);
$('#rec').add('<li>' + key.recipePersonsCount + '</li>').appendTo(document.body);
$('#rec').add('<li>' + key.recipeTime + '</li>').appendTo(document.body);
$('#rec').add('<li>' + key.recipeContents + '</li>').appendTo(document.body);
$('#rec').add('<li>' + key.recipeInstructions + '</li>').appendTo(document.body);
}
}
};
代わりに 'レシピ[キー] .recipeType'などを試してみてください。 'key'はレシピの名前ですが、特定のレシピタイプを取得するために、そのレシピの名前にアクセスする必要があります。 – Andy
私は、レシピが何を持っているかを正確に見る必要があります。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entriesを確認してください – agm1984
複数のレシピを保存していて、各レシピがオブジェクトである場合は、配列として保存する必要があります'{recipeType:' a '、recipeTime:1}、{recipeType:' b '、recipeTime:2}、{recipeType:' c '、recipeTime:3}'のようなレシピオブジェクトの数この形式でそれらを消費するほうがはるかに簡単です。並べ替えを含むすべての配列メソッドにアクセスでき、高速です。 – agm1984