ugrás a tartalomhoz

Erdekes for ciklus

carstepD · 2008. Jún. 30. (H), 16.45
Udv Mindenkinek,

oszinten megmondom atvettem egy kodot, ami ugyan megcsinalja, amit kell, csak nem ertem a ciklus reszet.
Eddig semmilyen segitseggel nem tudtam megfejeteni, hogyan fer bele a for ciklus szintaxisaba:
var catalog = [{
			title: 'Maintain Products',
			samples: [{
				text:	'Download upload sheet',
				url:	'../../../uploadsheet.xls',
				icon:	'download.png',
				desc:	'Download sheet to upload, update products.'
			}, {
				text:	'Upload prepared sheet',
				url:	'UploadForm',
				icon:	'downloadexcel2.png',
				desc:	'Upload prepared "upload sheet", report errors on the uploaded sheet.'
			}, {
				text:	'Maintain products',
				url:	'MaintainProducts',
				icon:	'iudfolder.png',
				desc:	'Add, remove and update products.'
			}]
		}, {
			title: 'Maintain compatibility',
			samples: [{
				text:	'Updated products',
				url:	'#',
				icon:	'grid-array.gif',
				desc:	'After uploading products you can set their compatibility in the matrix.'
			}, {
				text:	'New products',
				url:	'#',
				icon:	'grid-edit.gif',
				desc:	'After adding products you can set its compatibility in the matrix.'
			}, {
				text:	'New determinants',
				url:	'#',
				icon:	'grid-xml.gif',
				desc:	'If new determinants has been defined in the background you can maintain it\'s compatibility.'
			}, {
				text:	'All issues',
				url:	'#',
				icon:	'grid-paging.gif',
				desc:	'Enhanced way to maintain compatibility of the existing issues, for new or updated productas as determinant changes please refer to previous functionality.'
			}]
		}, {
			title: 'Maintaining subaccounts',
			samples: [{
				text:	'Managing subaccounts',
				url:	'#',
				icon:	'tabs.gif',
				desc:	'Maintain add, update and delete subaccounts of the subsription.'
			}, {
				text:	'Setup a new account',
				url:	'#',
				icon:	'tabs-adv.gif',
				desc:	'Add and setup new account, this is a shorthand functionality of maintaining subaccounts.'
			}]
		}, {
			title: 'Statistics',
			samples: [{
				text:	'Product chart',
				url:	'#',
				icon:	'window.gif',
				desc:	'Product\'s range, usage etc statistics.'
			}, {
				text:	'Car chart',
				url:	'#',
				icon:	'msg-box.gif',
				desc:	'Car related charts.'
			}, {
				text:	'Subaccounts statistics',
				url:	'#',
				icon:	'window-layout.gif',
				desc:	'Access statistics and get an overview of the subaccounts activity.'
			}]
		}];
		
		for (var i = 0, c; c = catalog[i]; i++) {
			c.id = 'sample-' + i;
		}
egy kis utmutatast kerek, ha van valakinek ideje ra,

koszonettel
Sanyi
 
1

Biztos, hogy nem hibás?

Velias9 · 2008. Jún. 30. (H), 18.27
Ha jól értelmezem, akkor a ciklus végigmegy a tömb elemein.
Elvileg a feltétel csak addig fog igazat visszaadni, amíg az 'i' meg nem haladja a tömb utolsó indexét (ami ebben az esetben 3). Ennek következményeképpen (ha minden igaz) a 'c' nevű (most már) objektum 'id' nevű változójának a neve "sample-3" lesz.

Szerintem ennek semmi értelme. Ha a tömb elemeinek számát szeretné tudni, akkor a 'catalog.length' segítségével megkapná. Én úgy tudom, hogy (mivel a JS-ben nincs asszociatív tömb) az indexek mindíg sorban lesznek, még, ha töröltek is belőlük. Ezek alapján az utolsó indexet megkaphatná, ha kivon az elemek számából egyet.
Ennek (szerintem) akkor van értelme, ha az előző állításom nem igaz, mert akkor az utolsó index meghatározására szolgál.

Remélem tudtam segíteni.
2

Biztos, hogy nem hibás.

Ustak · 2008. Jún. 30. (H), 20.19
Kemény kis for loop:-) Próbáljátok ki firebuggal, ha bemásoljátok a console-ba és a for ciklusba bebiggyesztetek egy console.log(c.id)-t akkor látszik, hogy valóban végigmegy a tömbön! De miért?
Azért mert a for ciklusunk így néz ki:
for ([initial expression];[condition];[increment expression])
Az initial expression ugye a változó(k) deklarálása, esetleg értékadás nékik.
A condition rész lesz kiértékelve. Ha visszatérési értéke igaz, akkor folytatódik a ciklus, ha hamis, akkor a ciklus nem folyatódik tovább. Tudnunk kell a javascript-ről, hogy a 0,null,''(üres string),false,undefined mind egyenlően (==) false, azaz "hamis" -ra értékelődnek ki. Itt is ez történik, mikor az adott tömb túlindexelődik, a következő c undefined lesz, így hamisra értékelődve a ciklus nem megy tovább. Okos humanoid írhatta, megspórolt vele egy tömbhossz lekérdezést-vagy többet, ha a condition részbe teszi(pli=0; i<tomb.length;i++) :-)
Ha a pontos értéket keressük (pl undefined) akkor érdemes a (===) (!==) operátorokat használni.
3

kösz

carstepD · 2008. Júl. 1. (K), 09.53
Mindkettőtöknek köszönöm a választ! ennyire triviálisnak nem gondoltam volna a megoldást, persze erre a firebugos megoldásra magam is rájöhettem volna, így elmagyarázva tényleg logikus... :)

Üdv
Sanyi