|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[generico]ciclo for scartare indici
Salve a tutti, ho questo piccolo problema:
all'interno di un array, devo "prendere" l'indice corrente e "buttare" tutti gli altri. personalmente devo utilizzare javascript, ma un ciclo è un ciclo, quindi un suggerimento in qualsiasi modo mi va già benone. Sto ragionando così: Codice:
var index = someIndex; var myArray = someArray(); for(var i = 1; i < myArray.length; i++) { if(myArray[i] === index) { myArray.splice(i, 1); } miaFunzione(myArray[i]).doSomething(); } Ovviamente, se faccio al contrario, non funziona nulla, mi spiego: ho sul form 10 oggetti; i dieci oggetti fanno parte del mio array; ovviamente ogni oggetto ha il suo index; se inizio ad usare gli oggetti in modo crescente, tutto funziona come mi aspetto; se parto dall'ultimo o comunque "conto" a decrescere, non funziona nulla. Grazie a tutti.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Con quel codice tu butti l'oggetto con l'indice corrente non gli altri.
La splice ti rimuove l'oggetto corrente dall'array e ti restituisce l'array senza quell'oggetto. Quindi chiami la funzione su un oggetto sbagliato. Col for al contrario di conseguenza chiami la funzione su un oggetto sbagliato o addirittura non più esistente ![]() Ultima modifica di airon : 30-10-2013 alle 10:27. |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() In effetti a me è proprio ciò che serve. Tolgo l'oggetto corrente dall'array. Ciò mi serve perché solo l'oggetto che ho tolto deve poter eseguire la funzione e non tutti gli altri.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
|
per prendere l'oggetto rimosso credo che dovresti fare una cosa tipo questo:
var removedArray = myArray.splice(i, 1); miaFunzione(removedArray[0]).doSomething(); così dovresti chiamare la funzione solo per quell'elemento. la funzione splice ti restituisce un array con gli elementi rimossi se non sbaglio oltretutto mi sorprende che il for, anche a crescere, funzioni...
__________________
tag XBOX live Aldair74 Nick PSNRiordian Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Eh ok ma non riesco a capire perché lo rimuovi dall'array e poi ci chiami la funzione. Chiama la funzione e poi lo rimuovi.
Se fai il for al contrario devi stare attento, dato che lo rimuovi...array[i] non esiste più. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
|
Quote:
![]() http://www.tutorialspoint.com/javasc...ray_splice.htm
__________________
tag XBOX live Aldair74 Nick PSNRiordian Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Scusate avete ragione. Ritorna il nuovo array con elementi aggiunti oppure l'array con gli oggetti rimossi. MI son confuso
![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
|
comunque io, se la necessità è quella di chiamare la funzione solo per quell'elemento, farei così:
Codice:
var index = someIndex; var myArray = someArray(); for(var i = 1; i < myArray.length; i++) { if(myArray[i] === index) { miaFunzione(myArray[i]).doSomething(); myArray.splice(i, 1); } } ![]()
__________________
tag XBOX live Aldair74 Nick PSNRiordian Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
|
Quote:
![]() Oltretutto credo che se sei nell'ultimo elemento dell'array va pure in eccezione un ciclo del genere percè i diventerebbe uguale a array.length per cui sei fuori dall'indice max che è array.length-1
__________________
tag XBOX live Aldair74 Nick PSNRiordian Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Scusatemi tutti ma sono io che sto generando confusione
![]() Allora, all'interno di una pagina ho diversi player audio. Io devo fare in modo che possa suonarne soltanto uno per volta. l'array è composto dagli id dei players. quindi io ho una funzione sul play: Codice:
onPlay: function() { var pID = <?php echo json_encode($players[$count]); ?>; var pArray = <?php echo json_encode($players); ?>; for(var i = 0; i < pArray.length ; i++) { if(pArray[i] === pID) { pArray.splice(i, 1); } jwplayer(pArray[i]).stop(); Ora, se parto dal player0 a salire, tutto funziona bene(il player che parte ferma il successivo o successivi a salire), se parto dall'ultimo o vado a "scendere", i players suonano in contemporanea.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Mah secondo me l'approccio è sbagliato. Nel senso che tu devi bindare il play e lo stop su quello che fa l'utente. Anche perchè se l'utente fa partire l'audio/video 1 e poi vuol far partire il 5, e poi il 3 e poi il 2 e poi il 10?
Io fare così: All'inizio son tutti spenti. Un utente fa play? Ti tieni l'id dell'oggetto. L'utente fa play su un altro? Non devi ciclare nulla, hai l'id del player precedente, fai stop sull'id precedente, poi modifichi l'id vecchio con quello corrente e fai play. Ultima modifica di airon : 30-10-2013 alle 11:28. |
![]() |
![]() |
![]() |
#13 | ||
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Quote:
Non capisco però come posso non ciclare dato che non ho un numero fisso di players ma vengono caricati dinamicamente. Come posso "catturare" quindi l'id del player ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
||
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
|
Quote:
for(var i = 0; i < pArray.length ; i++) { if(pArray[i] === pID) { continue; jwplayer(pArray[i]).stop(); }
__________________
tag XBOX live Aldair74 Nick PSNRiordian Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
una nota: per "contemporanea" io intendo che se l'utente fa click su uno o più player si sovrappongono. Di base sono tutti con autoplay a false.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Come ti dicevo devi bindare l'azione di play e stop sull'oggetto, tramite javascript.
Qui trovi tutti gli esempi http://www.longtailvideo.com/support...javascript-api http://www.longtailvideo.com/support...-api-reference Questo fa proprio al caso tuo: http://www.longtailvideo.com/support...usive-playback Ultima modifica di airon : 30-10-2013 alle 11:59. |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]() Io invece ho N player 'singoli' caricati dinamicamente.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Guarda qui:
A me pare proprio quello che vuoi tu ![]() http://www.longtailvideo.com/support...usive-playback |
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:01.