2012-02-13 13 views
6

So che JSLint è solo una guida e si dovrebbe prendere quello che dice con un pizzico di sale, tuttavia, sono curioso di sapere come posso risolvere questo avvertimento senza riscrivere l'intera funzione . Ecco la funzione di interesse:JS Lint Array Notazione letterale con stringa Split

function randomString(length) { 
    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split(''), 
    str = '', 
    i; 

    if (!length) { 
     length = randomNumber(chars.length); 
    } 

    for (i = 0; i < length; i++) { 
     str += chars[randomNumber(chars.length)]; 
    } 
    return str; 
} 

JS Lint mi dice "JS Lint: utilizzare la notazione letterale array []." e punta alla linea con string.split(). Come posso soddisfare JSLint senza dover riscrivere l'intera funzione? È possibile?

Sono consapevole che esistono altri metodi per generare stringhe casuali; Sono interessato a come risolvere l'avviso JSLint utilizzando questo metodo.

+6

Non hai nemmeno bisogno di un array in questo caso, si potrebbe lasciarlo come corda e usare 'chars.charAt (...) '. Forse è sufficiente per soddisfare JSLint. –

+0

Questo è un buon punto e alla fine potrei semplicemente cambiarlo. Tuttavia, mi piacerebbe comunque sapere come JSLint si aspetta che io usi la notazione letterale dell'array in questa particolare istanza. – arb

+0

Non so, ma qui è la fonte;) https://github.com/douglascrockford/JSLint/blob/master/jslint.js#L3578 –

risposta

3

è possibile chiamare la funzione split String prototipo con la stringa come lo scopo di evitare l'avviso:

var chars = String.prototype.split.call('ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz', ''), 

non so perché JSLint si lamenta perché split è un metodo String.

See: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split

questo sembra anche passare senza lamentele:

var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz', 
chars = alphabet.split(""); 
4

Ecco il vostro Array in letterale array-notazione:

[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'T', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ] 

JSLint probabilmente suggerito, perché in questo modo l'interprete non deve dividere la stringa in fase di esecuzione, ma piuttosto ha già l'Array pronto per l'uso .

Semplicemente generato con questo PHP-Code:

php > $chars = str_split('ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'); 
php > echo "[ '".implode("', '", $chars)."' ]"; 
[ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'T', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ] 
php > 
+4

Perché complicato PHP? Basta digitare 'JSON.stringify ('ABC ... xyz'.split (' '))' nella console * javascript * del tuo browser :-) – Bergi

+0

@Bergi Sto meglio con PHP che con JS, grazie comunque :) – TimWolla