PDA

View Full Version : [JS/jQuery] Eliminare definitivamente un array


kwb
11-07-2013, 20:22
Ciao!
Come da titolo, ho la necessità di eliminare un array ( che poi è un array di oggetti ) ed ogni suo riferimento, perchè poi devo ririempirlo con roba nuova.
Questo è quanto ho provato:

$("button[id^='download']").click(function(Elem){
res=$(this).parent().siblings().eq(0).children('a.chapterLink').attr('href').split('/');
link=Elem.currentTarget.baseURI+res[3]+'/';
if(typeof chapter == 'object')
delete window.chapter;
chapter=[];
console.log("Chapter length: "+chapter.length);
fetchSingleChapter(link,1,1); // Sends 1: link, 2: it's the first page! 3: page num
$(document).ajaxStop(function(){
console.dir(chapter);
});
});

Non c'è modo...
Ho anche provato a impostare la lunghezza a 0. Niente..

Soluzioni?

kwb
13-07-2013, 18:18
Up :(

DanieleC88
17-07-2013, 01:48
A parte che non vedo il bisogno di inzozzare il global object, ma... quale problema riscontri? Assegnargli un nuovo valore dovrebbe andare più che bene. Ti ho fatto un piccolo test case a dimostrazione: http://codepen.io/anon/pen/bguBL

kwb
17-07-2013, 13:02
Ciao,
Penso che il tuo codice funzioni come sperato perchè tu carichi interi dentro.
Quello che faccio io invece è caricare oggetti ( nel caso, immagini create con new Image() ) nell'array. Di conseguenza, per come funziona js, non viene caricato l'oggeto, ma il riferimento all'oggetto.
Inoltre ( mi sono documentato un po', anche se non conosco molto bene l'argomento ) a causa del garbage collector di JS, anche azzerando l'array che contiene gli oggetti, i riferimenti non vengono veramente cancellati perchè "potrebbero" servire ancora ( e non vengono eliminati dal garbage collector ).
Fatto sta che speravo che ci fosse un modo per "ingannare" questo funzionamento e cancellare l'array anche se ha ancora riferimenti ad indirizzi di oggetti "possibilmente" validi ( a me in realta quegli oggetti non servono più una volta che ricarico l'array.. Ma JS non lo sa/capisce ).

EDIT: Comunque ora ho abbandonato il progetto perchè richiedeva uno sbattimento eccessivo e veramente 0 documentazione e supporto per certe librerie che utilizzavo.
Ciò nonostante, vorrei approfondire l'argomento perchè può sempre tornare utile.

DanieleC88
17-07-2013, 16:57
Ho usato dei Number perché non mi era chiaro quale fosse il tuo problema (sovrascrivere l'array o eliminare fisicamente i suoi contenuti).

Non mi è chiaro perché dovresti volere l'eliminazione fisica dei suoi contenuti, anziché lasciare che il garbage collector lo faccia quando preferisce. Non mi risulta esista un modo di forzare la garbage collection, per cui dovresti evitare di dipendere da questo assunto.

In teoria, comunque, ogni oggetto inutilizzato (ovvero, verso il quale non c'è nessun riferimento attivo) viene eliminato dal garbage collector alla sua prossima esecuzione.

kwb
17-07-2013, 21:34
Ma si infatti per fare quello che poi volevo fare, ho studiato un'altra implementazione, tralasciando di fatto questa storia del ricaricare l'array...

Ma l'esecuzione del garbage collector da cosa dipende?