2012-02-13 11 views
6

Sé que JSLint es solo una guía y debe tomarse lo que dice con un grano de sal, sin embargo, tengo curiosidad de cómo puedo incluso resolver esta advertencia sin reescribir toda la función . Esta es la función de interés:JS Lint Array Notación Literal con String 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 pelusa me dice "JS Lint: Usar la notación de matriz literal []." y está apuntando a la línea con string.split(). ¿Cómo puedo satisfacer JSLint sin tener que volver a escribir la función completa? ¿Es posible?

Soy consciente de que existen otros métodos para generar cadenas aleatorias; Me interesa cómo resolver la advertencia de JSLint con este método.

+6

Usted ni siquiera necesita una matriz en ese caso, podría dejarlo como cuerda y usar 'chars.charAt (...) '. Quizás eso sea suficiente para satisfacer a JSLint. –

+0

Ese es un buen punto y podría cambiarlo eventualmente. Sin embargo, aún me gustaría saber cómo JSLint espera que utilice la notación literal de matriz en esta instancia particular. – arb

+0

No sé, pero aquí está la fuente;) https://github.com/douglascrockford/JSLint/blob/master/jslint.js#L3578 –

Respuesta

3

puede llamar a la función de división prototipo de la secuencia con la cadena como el alcance para evitar la advertencia:

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

No sabe por qué JSLint se queja porque split es un método String.

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

esto también parece pasar sin quejas:

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

Aquí es su matriz en literal matriz de notación:

[ '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 probablemente sugerido, porque de esa manera el intérprete no tiene que dividir la cadena en tiempo de ejecución, sino que ya tiene la matriz listo para usar .

Simplemente generado con este código PHP:

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

¿Por qué PHP complicado? Simplemente escriba 'JSON.stringify ('ABC ... xyz'.split (' '))' en la consola * javascript * de su navegador :-) – Bergi

+0

@Bergi Estoy mejor con PHP que con JS, gracias de todos modos :) – TimWolla

Cuestiones relacionadas