naam van variabelen veranderen met for loop

Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Hey iedereen.

Ik heb problemen met het gebruiken van een for loop in een van mn scripts.
Ik weet hoe een for loop werkt, maar heb problemen met de naam van een variabele ermee te veranderen. De waarde van i zou deel moeten worden van de naam van dvar. Hoe doe ik dit?


Code:
<script type="text/javascript">
dvar0 = 0;
dvar1 = 1;
dvar2 = 2;
dvar3 = 3;
for (i = 0; i <= 3; i++)
{
document.write(dvar[i])
document.write("<br />")
}
</script>
 
PHP:
<script type="text/javascript">
dvar = new array("0", "1", "2", "3");
for(i=0; i<= 3; i++) {
  document.write(dvar[i]);
  document.write("<br />");
}
</script>

Volgens mij moet hij zo werken...
 
Ja, dat zal op zich wel werken, maar ik heb er niet echt veel aan.

Afhankelijk van een aantal handeingen van de gebruiker zullen er meer of minder "dvar" variablen zijn, het aantal van deze variabelen zal ook altijd beschikbaar zijn, daarom dacht ik aan iets zoals dit:
Code:
<script type="text/javascript">
dvar0 = 0;
dvar1 = 1;
dvar2 = 2;
dvar3 = 3;
for (i = 0; i <= [COLOR="DarkRed"]AantalVariabelen[/COLOR]; i++)
{ document.write(dvar[i]) }
</script>

Kan ik als ik een array gebruik ook het aantal erin verwerken?

Ik heb dit nodig omdat ik nu deze lijn script gebruik en deze dan honderden keren moet gaan copieren en alle numers erin veranderen om zeker te zijn dat het werkt.
Code:
if ([COLOR="red"]1[/COLOR]naam != "" && [COLOR="red"]1[/COLOR]naam !=" ") {bedr[COLOR="Red"]1[/COLOR] = functionbeg + [COLOR="red"]1[/COLOR]naam + functionope + functnaam + [COLOR="red"]1[/COLOR]locatie + functendr + functurl + [COLOR="red"]1[/COLOR]url + functendr + functtel + [COLOR="red"]1[/COLOR]telefoon + functendr + funfend} else {bedr[COLOR="red"]1[/COLOR] = ""};
 
In je begin post werd het mij niet duidelijk dat je dat wilde...

Wellicht helpt dit je dan...
PHP:
<script type="text/javascript"> 
dvar = new array("0", "1", "2", "3"); 
for(i=0; i < dvar.length ; i++) { 
  document.write(dvar[i]); 
  document.write("<br />"); 
} 
</script>

Deze geeft als het goed is alle waardes uit de array, ook als je deze aanvult...
 
Ik zal mijn probleem nog eens uitleggen, en hoop dat het nu duidelijker is.

Ik ben nu bezig met een pagina (pagina b) die informatie moet scrhijven naar een anderen (pagina c) pagina en informatie krijgd van nog een andere pagina (pagina a).

Deze code haalt een aantal gegevens op van pagina a (deze gegevns zijn 1naam, 1locatie, 1url en 1telefoon). Afhankelijk van de situatie zullen er een bepaald aantal "naam" variablene zijn, en meestal dus ook 2naam, 3naam, en zo voort.
Code:
if ([COLOR="red"]1[/COLOR]naam != "" && [COLOR="red"]1[/COLOR]naam !=" ") {bedr[COLOR="Red"]1[/COLOR] = functionbeg + [COLOR="red"]1[/COLOR]naam + functionope + functnaam + [COLOR="red"]1[/COLOR]locatie + functendr + functurl + [COLOR="red"]1[/COLOR]url + functendr + functtel + [COLOR="red"]1[/COLOR]telefoon + functendr + funfend} else {bedr[COLOR="red"]1[/COLOR] = ""};

Wat gebeurt er als ik in die array een ongedefineerde variabele plaats?
 
Met eval() voer je een string als script uit:
PHP:
<script type="text/javascript">
for (i = 0; i <= 3; i++) {
 eval('var dvar' + i + ' = ' + i);
 };
</script>
Dat creëert de vier variabelen dvar0 t/m dvar3 en geeft ze de waarden 0 t/m 3 :)


Vr.Gr. Egel
 
Euhm, zo werkt het in elk geval niet, hoe moet het wel?

PHP:
<script type="text/javascript">
dvar0 = 0;
dvar1 = 1;
dvar2 = 2;
dvar3 = 3;
for (i = 0; i <= 3; i++) { 
eval('var dvar' + i + ' = ' + i); 
}; 
</script>
 
Om het nog wat te verduidelijken heb je hier hetgeen ik nu gebruik als noodoplossing.

Dit zijn de variabelen die verwerkt worden:
PHP:
   naam1    = "";   
   locatie1 = "";   
   url1     = "";   
   telefoon1= "";  

   naam2    = "";
   locatie2 = "";
   url2     = "";
   telefoon2= "";

   naam3    = "";
   locatie3 = "";
   url3     = "";
   telefoon3= "";

Dit is de code die ik gebruik en die ik dus in een keer wil doen ipv in het aantal groepen variabelen er zijn.
PHP:
         functionbeg = "function "; functionope = "() { "; functnaam = "naam = \""; functendr = "\"; "; functurl = "url = \""; functtel = "telefoon = \""; funfend = "} ";
         if (numberofnames >= 1){ if (naam1 != "" && naam1 !=" ") {bedr1 = functionbeg + naam1 + functionope + functnaam + locatie1 + functendr + functurl + url1 + functendr + functtel + telefoon1 + functendr + funfend} else {bedr1 = ""}} else {bedr1 = ""};
         if (numberofnames >= 2){ if (naam2 != "" && naam2 !=" ") {bedr2 = functionbeg + naam2 + functionope + functnaam + locatie2 + functendr + functurl + url2 + functendr + functtel + telefoon2 + functendr + funfend} else {bedr2 = ""}} else {bedr2 = ""};
         if (numberofnames >= 3){ if (naam3 != "" && naam3 !=" ") {bedr3 = functionbeg + naam3 + functionope + functnaam + locatie3 + functendr + functurl + url3 + functendr + functtel + telefoon3 + functendr + funfend} else {bedr3 = ""}} else {bedr3 = ""};         
         varscript = bedr1 + bedr2 + bedr3;
 
In een lus kun je naam1, naam2 enz vervangen door eval('naam' + i)

Ik weet niet precies wat je wilt doen maar is een array van objecten niet bruikbaar? Op deze manier:
PHP:
<script type="text/javascript">

var data = new Array();

function addData(naam,locatie,url,telefoon) {
 data[data.length] = {naam: naam, locatie: locatie, url: url, telefoon: telefoon};
 };

addData('Jansen','Amsterdam','www.jansen.nl','0208888888');
addData('de Vries','Rotterdam','www.devries.nl','0107777777');

alert(data[0].locatie);
alert(data[1].url);

</script>
Dat is zelfs alfabetisch te sorteren op telefoonnummer of naam. :)


Vr.Gr. Egel
 
Oke, met eval() ben ik al geholpen en ik ga ook arrays gebruiken, maar hoe werkt die alfabetische schikking?
 
Dit sorteert de array van objecten op de .locatie eigenschap (property):
PHP:
data.sort(function(a,b) {return (a.locatie).localeCompare(b.locatie);});
:) Door ipv .locatie .naam, .telefoon of .url te gebruiken sorteerd het daarop. Als je a.locatie en b.locatie verwisselt sorteerd het van z > a (aflopend). localeCompare() is hoofdletter ongevoelig, maar bij de naam zou je wel Vries de moeten gebruiken, anders komt het onder de d te staan. :)


Vr.Gr. Egel
 
Laatst bewerkt:
Ok, thnx alot ;))

Als ik nog problemen tegenkom met deze functie laat ik het wel weten :)
 
Ik ga dit gebruiken, maar weet niet goed hoe ik het aantal lijnen met data kan genereren.
PHP:
addData('Jansen','Amsterdam','www.jansen.nl','0208888888');
addData('de Vries','Rotterdam','www.devries.nl','0107777777');

Als er maar x verschillende bedrijven zijn, moet de teruggegevn waarde x zijn, hoe doe ik dit?


Update:
Ik heb nu deze code, en heb enkel het bovenstaande probleem nog niet opgelost
Code:
         addData('bedrijf1','locatie1','url1','telefoonnummer1');
         addData('bedrijf2','','','');
         addData('bedrijf3','','','');
      
         functionbeg = "function "; functionope = "() { "; functnaam = "naam = \""; functloc = "locatie = \""; functendr = "\"; "; functurL = "url = \""; functtel = "telefoon = \""; funfend = "} \n";
         var data = new Array(); function addData(naam,locatie,url,telefoon) {data[data.length] = {naam: naam, locatie: locatie, url: url, telefoon: telefoon};};
         bedr = "";
         for(i=1; i <= [COLOR="Red"][AantalLijnenData][/COLOR] ; i++) { data[i].naamnospaces = data[i].naam.split(' ').join(''); bedr = bedr + functionbeg + data[i].naamnospaces + functionope + functnaam + data[i].naam + functendr + functloc + data[i].locatie + functendr + functurL + data[i].url + functendr + functtel + data[i].telefoon + functendr + funfend };

Zal deze code werken als die ene waarde is ingevuld, of zit er ergens iets verkeerd?
 
Laatst bewerkt:
data.length geeft aan uit hoeveel objecten de array bestaat. De index loopt van 0 t/m data.length - 1:
PHP:
for (var i = 0; i < data.length; i++) { ... };
Als je naamnospaces voor alle objecten wilt gebruiken is het wel makkelijk om dat meteen aan de addData() functie toe te voegen:
PHP:
function addData(naam,locatie,url,telefoon) {
 data[data.length] = {naam: naam, naamnospaces: naam.split(' ').join(''), locatie: locatie, url: url, telefoon: telefoon};
 };


Vr.Gr. Egel.
 
Ok, gedaan :D

Dus dit zou correct moeten zijn?

PHP:
         functionbeg = "function "; functionope = "() { "; functnaam = "naam = \""; functloc = "locatie = \""; functendr = "\"; "; functurL = "url = \""; functtel = "telefoon = \""; funfend = "} \n";
         var data = new Array(); function addData(naam,locatie,url,telefoon) {data[data.length] = {naam: naam, naamnospaces: naam.split(' ').join(''), locatie: locatie, url: url, telefoon: telefoon};};
         bedr = "";
         for(i=1; i <= data.length ; i++) { bedr = bedr + functionbeg + data[i].naamnospaces + functionope + functnaam + data[i].naam + functendr + functloc + data[i].locatie + functendr + functurL + data[i].url + functendr + functtel + data[i].telefoon + functendr + funfend };
 
Ja, maar dan wel van 0 tot data.length Als de lengte 10 is loopt de index van 0 t/m 9.
PHP:
<script type="text/javascript">

var data = new Array();

function addData(naam,locatie,url,telefoon) {
 data[data.length] = {naam: naam, naamnospaces: naam.split(' ').join(''), locatie: locatie, url: url, telefoon: telefoon};
 };

addData('Vries de','Rotterdam','www.devries.nl','0107777777');
addData('Jansen','Amsterdam','www.jansen.nl','0208888888');

data.sort(function(a,b) {return (a.locatie).localeCompare(b.locatie);});


bedr = "";
functionbeg = "function "; functionope = "() { "; functnaam = "naam = \""; functloc = "locatie = \""; functendr = "\"; "; functurL = "url = \""; functtel = "telefoon = \""; funfend = "} \n";
for (var i = 0; i < data.length; i++) {
 bedr = bedr + functionbeg + data[i].naamnospaces + functionope + functnaam + data[i].naam + functendr + functloc + data[i].locatie + functendr + functurL + data[i].url + functendr + functtel + data[i].telefoon + functendr + funfend;
 };

eval(bedr);

Jansen(); alert(telefoon);
Vriesde(); alert(telefoon);



// opzoeken kan ook

function getData(naamnospaces) {
 for (var i = 0; i < data.length; i++) {
  if (data[i].naamnospaces == naamnospaces) {
   naam = data[i].naam;
   locatie = data[i].locatie;
   url = data[i].url;
   telefoon = data[i].telefoon;
   };
  };
 };

getData('Jansen'); alert(telefoon);
getData('Vriesde'); alert(telefoon);



// of ... strings als de index van data :)

function addData2(naam,locatie,url,telefoon) {
 data[naam.split(' ').join('')] = {naam: naam, locatie: locatie, url: url, telefoon: telefoon};
 };

addData2('Vries de','Rotterdam','www.devries.nl','0107777777');
addData2('Jansen','Amsterdam','www.jansen.nl','0208888888');

function getData2(naamnospaces) {
 naam = data[naamnospaces].naam;
 locatie = data[naamnospaces].locatie;
 url = data[naamnospaces].url;
 telefoon = data[naamnospaces].telefoon;
 };

getData2('Jansen'); alert(telefoon);
getData2('Vriesde'); alert(telefoon);

</script>
Er zitten nog twee extra mogelijkheden in het script, opzoeken en een data array die strings als indexen gebruikt. Die laatste is het kleinste en snelste. :)


Vr.Gr. Egel.
 
Oke. Maar ik wil dit in een ander bestand hebben dat voor het bestand met de rest van de code bestand laad, hoe doe ik dit best?
PHP:
addData('Vries de','Rotterdam','www.devries.nl','0107777777');
addData('Jansen','Amsterdam','www.jansen.nl','0208888888');

En ik snap deze lijn van het laatste voorbeeld niet echt goed...
PHP:
data[naam.split(' ').join('')] = {naam: naam, locatie: locatie, url: url, telefoon: telefoon};
 };
Om precies te zijn dit deel: data[naam.split(' ').join('')] = {...}
Hoe krijg je dan een variabele van de naam zonder paties en een met de spaties?
 
Laatst bewerkt:
Oke. Maar ik wil dit in een ander bestand hebben dat voor het bestand met de rest van de code bestand laad, hoe doe ik dit best?
PHP:
addData('Vries de','Rotterdam','www.devries.nl','0107777777');
addData('Jansen','Amsterdam','www.jansen.nl','0208888888');
PHP:
  <script src="data.js" type="text/javascript"></script>
In data.js zet je dan
PHP:
var data = new Array(); 

function addData(naam,locatie,url,telefoon) { 
........
}; 

addData('Vries de','Rotterdam','www.devries.nl','0107777777'); 
addData('Jansen','Amsterdam','www.jansen.nl','0208888888');
En ik snap deze lijn van het laatste voorbeeld niet echt goed...
PHP:
data[naam.split(' ').join('')] = {naam: naam, locatie: locatie, url: url, telefoon: telefoon};
 };
Om precies te zijn dit deel: data[naam.split(' ').join('')] = {...}
Hoe krijg je dan een variabele van de naam zonder paties en een met de spaties?
Met het voorbeeld van 'Vries de' krijg je:
PHP:
data['Vriesde'] = {naam: 'Vries de', locatie: 'Rotterdam', url: 'www.devries.nl',telefoon: '0107777777'}
Dan wordt data['Vriesde'].naam == 'Vries de';


Maar waar is het voor? :) Moet je ergens klikken zoadat de naw gegevens ergens anders verschijnen?

Vr.Gr. Egel
 
Oke, bedankt.

Ik wil enkel die addData(...) lijnen in data.js hebben, dus ik ga hetgeen er voor staat in een apart bestand zetten (dan heb ik er dus 3). ik neem aan dat dit gaat?

Ik stuur je wel even een PM over wat dit eigenlijk is ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan