2012-03-09 7 views
7

A JSlint no le gusta el uso de constructores de Array y no hay opciones de JSLint para permitirlos. Por lo tanto, para crear una matriz de longitud n, no se permite lo siguiente:Creando una matriz n-sized mientras hace feliz a JSLint?

var arr = new Array(n); 

¿Es la siguiente la única forma en que puedo evitar esto?

var arr = []; 
arr.length = 5; 

En circunstancias normales, esto no es un gran problema (utilizando dos líneas de código en lugar de uno), pero siento no poder utilizar el concisa truco cadena multiplicador:

function repeat(str, times) { 
    return new Array(times + 1).join(str); 
} 
+0

posible duplicado de (http: // stackoverflow. com/questions/4852017/proper-way-to-initialize-an-arrays-length-in-javascript) –

+1

¿Por qué necesita crear una matriz n-sized? Dado que has descrito la función del multiplicador de cadenas como si usaras un "hack", me sorprende que te importe lo que dice jslint sobre 'new Array()' ... pero puedes implementar fácilmente la función 'repeat()' con un ciclo for o la cosa '.length =' si esa es la única razón por la que necesita 'new Array()'. – nnnnnn

+0

* "Lamento no poder usar ..." * ¿Estás bajo alguna restricción que requiera el uso de JSLint? –

Respuesta

2

JSLint es bastante fácil de burlar.

Usted puede simplemente hacer esto:

function repeat(str, times) { 
    var A = Array; 
    return new A(times + 1).join(str); 
} 

Esto también funcionaría: [? Forma adecuada para inicializar la longitud de un array en Javascript]

function repeat(str, times) { 
    return new Array.prototype.constructor(times + 1).join(str); 
} 
+0

¡Perfecto! Esto es lo que estaba buscando :) –

+3

No hay problema. Lo interesante a tener en cuenta es que para evitar el linter, en realidad ha producido un código más incómodo, por lo que el linter está haciendo lo contrario de lo que estaba previsto. Si se topa con esto mucho, podría considerar investigar (o hacer que el jefe de proyecto investigue) otros linters. –

+0

Realmente no me importa la incomodidad. Estaba realmente interesado en ver si había un truco para hacer que JSLint ignorara el truco. –

Cuestiones relacionadas