HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m
Even snel uit me hoofd
Waarom (volgens mij, het is laat) het mis gaat is in je gegeven code is dat je de referentie opslaat naar B... dus niet daadwerkelijk de array zelf...
JavaScript:
1
2
3
4
5
6
7
8
9
10
| B = [1, 1, 1, 1, 1, 1, 1, 1]; A = [{1: B}]; C = B.slice(0) C[0] = 2; A[0][2] = C; alert(A[0][1]); alert(A[0][2]); |
Waarom (volgens mij, het is laat) het mis gaat is in je gegeven code is dat je de referentie opslaat naar B... dus niet daadwerkelijk de array zelf...
Dit is inderdaad het verschil tussen pass by reference (wat hier gebeurt) en pass by value (wat je graag zou willen). Ik weet zo even niet hoe het in JS werkt maar in de meeste talen kun je expliciet aangeven dat je de waarde van een variabele door wil geven in plaats van de variabele zelf, óf je kunt aangeven dat je een clone van de variabele wil maken die je vervolgens gewoon by reference door kan geven.
Afgezien van dat: JavaScript hoort in Webdesign, Markup & Clientside Scripting.
PRG >> WEB
Afgezien van dat: JavaScript hoort in Webdesign, Markup & Clientside Scripting.
PRG >> WEB
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Turani bedankt
De .slice(0) was inderdaad de oplossing. Weer wat geleerd.
NMe, ohja, ik was even vergeten dat dat subforum ook bestond, sorry...
NMe, ohja, ik was even vergeten dat dat subforum ook bestond, sorry...
HP ZBook Studio G3 - Hyundai Ioniq EV Classic - Opel Vivaro-e 75kWh - 22x Prusa i3 MK3S - 8x Prusa MINI+ - Ooznest Workbee 1,5m x 1,5m
Je gebruikt hier wel een beetje een omweg. De wens is dat er een kopie van B in A wordt opgeslagen, dus ik zou dan ook daar de slice doen, zodat je daarna gewoon naar hartelust B kunt aanpassen.Turani schreef op maandag 17 december 2012 @ 02:00:
Even snel uit me hoofd
JavaScript:
1 2 3 4 5 6 7 8 9 10 B = [1, 1, 1, 1, 1, 1, 1, 1]; A = [{1: B}]; C = B.slice(0) C[0] = 2; A[0][2] = C; alert(A[0][1]); alert(A[0][2]);
Waarom (volgens mij, het is laat) het mis gaat is in je gegeven code is dat je de referentie opslaat naar B... dus niet daadwerkelijk de array zelf...
JavaScript:
1
2
3
| B = [1, 1, 1, 1, 1, 1, 1, 1]; A = [{1: B.slice(0)}]; // ... |
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.