Sie müssen das übergeordnete Objekt ändern:
function save(value, ...props)
{
var record = allRecords = JSON.parse(window.localStorage.getItem("data"));
var parent=record;
for (var prop of props)
{
parent=record;//store before modifying, so keep the parent
record = record[prop];
}
parent[prop]= value;
window.localStorage.setItem("data", JSON.stringify((allRecords));
return parent;
}
auch immer Sie jetzt, dass Ihre Funktion geht „tief“ in das Objekt (nur sagen):
save("hi","a","b","c");//will save like this
a={
b={
c="hi";
}
}
Eine weitere Möglichkeit der stoppen würde, Schleife direkt vor der letzten Iteration, notieren Sie dann [prop] = value.
1.Wie Objekte gespeichert werden: Objekte werden mit Zeiger gespeichert. So im Speicher sieht es aus wie diese (Pseudocode):
//a memory location holding an object
432:
val1:1
val2:2
Wenn Sie den Namen des Objekts sagen ist a, a wie folgt gespeichert wird:
a = location:432
, wenn Sie es kopieren, zum Beispiel mit b = a, nur der Zeiger kopiert wird nicht das Objekt:
a = location:432
b = location:432
Wenn Sie sth in das Objekt ein ändern, wird es in der Tat am Ort des Objekts ändern 432, also b wird geändert. Objekte in Objekte gleich aussehen:
//another obj
100:
obj1: location:432 //our pointer to the object
Also unsere for-Schleife (können am oberen speichern Beispiel bleiben) werden Zeiger auf ein Objekt folgen, erhalten eine Eigenschaft einen Zeiger zu halten, als auf ein anderes Objekt diesen Zeiger folgen (a-> b-> c). Diese Objekte sind irgendwo im Mem gespeichert. Die JSON.stringify-Funktion führt das tiefe Kopieren durch. Es folgt also jedem Zeiger und fügt alle notwendigen Informationen in eine Zeichenkette ein (Objekt a b und c).
- "Warum funktioniert der Code Arbeit und mys nicht wahr?":
Was Sie
value=obj[key];
value="new";
tun, was ich tun:
obj[key]="new";
Aber das ist das gleiche nicht wahr? NEE. Schauen wir uns die Daten im Speicher an:
//you
//before
value:undefined
obj:
key:"old"
//copying
value:"old"
obj:
key:"old"
//changing
value:"new"
obj:
key:"old" //never changed...
Beachten Sie, dass Sie ein Objektiv beschreiben. Außerdem hast du den attraktivsten Benutzernamen, den ich je * gesehen * habe. https://medium.com/javascript-inside/an-introduction-into- lenses-in-japascript-e494948d1ea5#.20hn1a91i –