2013-10-14 1 views
5

Ho un array in Javascript che ha molti sotto array. Quale sarebbe il modo migliore/più semplice per contare quanti bit/byte contiene l'array? Trasmetterò l'array al mio server PHP, e può essere solo grande 5kB.Numero bit/dimensione byte dell'array

Esiste un metodo nativo per questo? Non conosco molto bene i bit. Se l'ho capito correttamente, 1 carattere si adatta a 8b/1B (sebbene dipenda ovviamente dalla codifica). Il modo migliore sarebbe di scorrere tutti gli array e contare i personaggi?

risposta

7

Per prima cosa è necessario convertire la matrice nella rappresentazione di stringa utilizzata per trasmettere i dati al server. La dimensione dell'array non ha importanza in quanto sarà quella stringa che verrà trasmessa. A seconda del modo in cui serializzi quella matrice, la differenza di dimensione può essere molto significativa.

Le possibili opzioni per serializzare la matrice sono il metodo jQuery.param() o JSON.stringify(). Puoi anche creare il tuo metodo personale che converte i valori in modo che il tuo codice PHP possa capirlo.

Dopo aver ottenuto quella stringa, si prende stringValue.length * 8 per ottenere la dimensione, assumendo che a) i valori siano ASCII o b) si codificano per url tutti i valori in modo che i caratteri Unicode vengano trasformati in ASCII. *8 è lì per ottenere i bit, ma dal momento che si menziona che il limite è 5kB - quelli probabilmente sono byte, quindi si salta la moltiplicazione.

+0

Quotare i documenti 'jQuery.param':" Nota: poiché non esiste alcuna specifica universalmente concordata per le string param, non è possibile codificare strutture dati complesse utilizzando questo metodo in un modo che funzioni idealmente in tutte le lingue che supportano tali input. Usa invece il formato JSON come alternativa per codificare i dati complessi. " – Prinzhorn

+0

L'op vuole sapere quanti byte l'array ** contiene **. la tua soluzione non considera i caratteri in più che rappresentano gli array '[]' e '" 'etc ... così secondo la tua soluzione -' [1] 'ha una lunghezza di 3 che non è corretta (ha una lunghezza di 1). –

+0

@RoyiNamir Questo è quello che ha detto, ma non penso che sia ciò che intendeva: se solo riesce a trasferire 5kB al server, allora conta la lunghezza dei dati serializzati e '[1]' ha una lunghezza di 8, perché JavaScript memorizza il '1' come numero a virgola mobile IEEE 754 a 64 bit. Vedete, la sua domanda è ambigua – Prinzhorn

4

Si può fare questo: (al fine di ottenere davvero buona stima)

var g = JSON.stringify(myBigNestedarray).replace(/[\[\]\,\"]/g,''); //stringify and remove all "stringification" extra data 
alert(g.length); //this will be your length. 

Per esempio: avere alook a questo array nidificato:

var g=[1,2,3,['a','b',['-','+','&'],5],['שלום','יגבר']]

JSON.stringify(g).replace(/[\[\]\,\"]/g,'')

"123ab-+&5שלוםיגבר" 

Quale la sua lunghezza è: 17 (byte)

In questo modo, si utilizza il vantaggio di json.parse che svolge la maggior parte del lavoro, quindi si rimuovono i supporti di array aggiuntivi.