objecte in array speichern ??

07.09.2020 10:21 (zuletzt bearbeitet: 07.09.2020 10:27)
avatar  Mike48
#1 objecte in array speichern ??
avatar
Mitglied

Ich habe ein Problem beim speichern von objecten in einem array.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
<script>
 
window.addEventListener('load', function ( ) {
/* object fuer die Daten einer Person */
var person = {
vorname: '',
name: '',
geboren: ''
};
 
/* Liste in der alle Personen gespeichert werden */
var liste = [];
 
for (var i=0, i<5; i++) {
/*
* in dieser Schleife werden je Personen die Daten
* initialisiert und mit push in die Liste eingetragen
*/
person.vorname = 'Vorname_'+i;
person.name = 'Name_'+i;
person.geboren = '01.06.202'+i;
liste.push(person);
}
 
function log (v, i, ar) {
/* Die Variable i enthält den Index des Wertes v
im Array ar. Diese drei Parameter werden an die
Callback-Funktion bei forEach übergeben. */
if (console && console.dir) {
// Ausgabe einer Objektstruktur auf die Konsole
console.dir(v);
}
}
liste.forEach(log)
});
 
</script>
 



Das ist dann das Ergebnis. In allen Indexen des Array ist die Person 4 drin.



Wenn ich aber die Liste nach jedem push in sessionstore zwischen speichere und vor dem push wieder einlese dann ist die Liste richtig.

1
2
3
4
5
6
7
8
9
10
11
 
    if(xobor.plugin('vartest001').sessionstorage.get('liste') ) {
console.log("sessionstorage vorhanden");
liste=xobor.plugin('vartest001').sessionstorage.get('liste',);
liste.push(person);
xobor.plugin('vartest001').sessionstorage.set('liste',liste);
 
}else{
console.log("sessionstorage nicht vorhanden");
liste.push(person);
xobor.plugin('vartest001').sessionstorage.set('liste',liste);
}
 



Verstehen tue das nicht.
Hat Jemand eine Idee was da falsch ist?


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
07.09.2020 18:20 (zuletzt bearbeitet: 07.09.2020 18:23)
avatar  creator
#2 RE: objecte in array speichern ??
cr
Mitglied

In der For-Schleife ist schon Mal ein kleiner Fehler:

Zitat von Mike48 im Beitrag #1
for (var i=0, i<5; i++) {

Nach dem var i=0 sollte statt dem Komma ein Semikolon, also var i=0;. Das behebt aber nur den Fehler, dass in der Konsole nicht mehr Unexpected token '<' angezeigt wird.

Dass der Array nur aus Person 4 besteht liegt daran, dass du das in Zeile 5-9 definierte Person-Objekt modifizierst. Dadurch werden auch die bestehenden Objekte in der Liste beeinflusst.

Javascript weiß also noch, wo das Objekt überall vorhanden ist, und passt es entsprechend an. Wenn du probeweise in Zeile 20 (nach der For-Schleife und vor dem foreach) person.vorname = 'Test' einfügst wirst du merken dass auch das die ganze Liste beeinflusst.

Wenn du die Liste im localstorage zwischenspeicherst geht die Referenz zum bestehenden Objekt verloren. Deshalb wird es nicht mehr verändert.

Eine deutlich bessere Alternative wäre ein neues Objekt zum Array hinzufügen, statt das bestehende zu modifizieren.
Also statt die Attribute von dem bestehenden Objekt zu verändern:

1
2
3
4
 
person.vorname = 'Vorname_'+i;
person.name = 'Name_'+i;
person.geboren = '01.06.202'+i;
liste.push(person);
 


Erstellst du ein neues Objekt mit den gewünschten Attributen und fügst es zur Liste hinzu:

1
2
3
4
5
6
 
var person = {
vorname: 'Vorname_'+i,
name: 'Name_'+i,
geboren: '01.06.202'+i
};
liste.push(person);
 


Die Liste sieht dann wie gewünscht aus:


 Antworten

 Beitrag melden
07.09.2020 20:21 (zuletzt bearbeitet: 07.09.2020 20:22)
avatar  Mike48
#3 RE: objecte in array speichern ??
avatar
Mitglied

Danke @creator

klingt logisch, werde ich probieren.

Edit
bzw. hast du ja schon probiert.


www.friends-of-xobor.de (621181 - V4 Template)
www.seniorenclub-sel-koeln.de (578865 - V6 Template)

 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!