Ich habe den folgenden Code, um einige Werte in dem lokalen Speicher zu speichern und es anschließend als eine Liste anzuzeigen. Das Problem, das ich habe, ist mit displayRecipes(). Es zeigt nur den recipeName-Wert an und alles andere ist nicht definiert. Wie Sie sehen können, speichere ich alle Rezepte in localStorage.recipes mit dem Rezeptnamen auf der obersten Ebene und allen anderen Werten als "Untereigenschaften" wie folgt: {'rezeptName: {' andere Werte und Eigenschaften '...}} . Ich bin ziemlich neu in JavaScript, also dachte ich nur 'undefiniert' bedeutet, dass die Variablen nicht korrekt initialisiert wurden. Ich initialisiere und ordne sie in addNewRecipe(), aber zu dem Zeitpunkt, zu dem ich sie anzeigen möchte, sind sie bereits im lokalen Speicher gespeichert.Durch Eigenschaften eines Objektliterals Iterieren
Vielen Dank im Voraus für jede Hilfe.
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);
}
}
};
Versuchen 'Rezepte [key] .recipeType' usw. statt. 'key' ist der Name des Rezepts, aber Sie müssen auf diesen Schlüssel _auf dem Objekt_ zugreifen, um beispielsweise den spezifischen rezeptTyp zu erhalten. – Andy
Ich muss genau sehen, was "Rezepte" darin haben. Check out https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries – agm1984
Wenn Sie mehrere Rezepte speichern und jedes Rezept ein Objekt ist, sollten Sie diese als Array speichern von Rezeptobjekten wie '[{rezeptTyp:' a ', rezeptZeit: 1}, {rezeptTyp:' b ', rezeptZeit: 2}, {rezeptTyp:' c ', rezeptZeit: 3}] '. Es ist viel einfacher, sie in diesem Format zu konsumieren. Sie erhalten Zugriff auf alle Array-Methoden, einschließlich Sortieren, und es ist auch schneller. – agm1984