2012-03-09 4 views
7

JSlint non ama l'uso dei costruttori di array e non ci sono opzioni JSLint per consentirglielo. Pertanto, per creare una matrice di lunghezza n, non è consentito quanto segue:Creazione di un array di dimensioni n durante l'esecuzione di JSLint?

var arr = new Array(n); 

Il seguente è l'unico modo per aggirare questo problema?

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

In circostanze normali questo non è un grosso problema (con due righe di codice, invece di uno), ma mi dispiace di non essere in grado di utilizzare la concisa stringa di moltiplicatore mod:

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

possibile duplicato (http: // StackOverflow. it/questions/4852017/proper-way-to-initialize-an-arrays-length-in-javascript) –

+1

Perché è necessario creare un array di dimensioni n? Dato che hai descritto la funzione moltiplicatore di spigoli usando un "hack" sono sorpreso che ti interessi cosa dice jslint su 'new Array()' ... ma puoi facilmente implementare la funzione 'repeat()' con un ciclo for o la cosa '.length =' se questa è l'unica ragione per cui hai bisogno di 'new Array()'. – nnnnnn

+0

* "Mi dispiace non essere in grado di usare ..." * Sei sotto un vincolo che richiede l'utilizzo di JSLint? –

risposta

2

JSLint è abbastanza facile da battere in astuzia.

Si può solo fare questo:

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

Questo potrebbe anche funzionare: [? Modo corretto per inizializzare la lunghezza di un array in javascript]

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

Perfetto! Questo è quello che stavo cercando :) –

+3

Nessun problema. La cosa interessante da notare è che per aggirare il linter, hai effettivamente prodotto un codice più imbarazzante, quindi il linter sta facendo l'opposto di quello a cui è destinato. Se ci si imbatte molto in questo, si potrebbe considerare di esaminare (o di avere il ruolo di guida del progetto) in altri linters. –

+0

Non mi dispiace davvero l'imbarazzo. Ero sinceramente interessato a vedere se c'era un trucco per far ignorare a JSLint il trucco. –

Problemi correlati