2012-03-09 17 views
7

JSlint, Array kurucularının kullanımını sevmez ve onlara izin vermek için JSLint seçeneği yoktur. Bu nedenle, n uzunluğundaki bir Array oluşturmak için, aşağıdaki izin verilmez:JSLint'i mutlu ederken n boyutlu bir Dizi oluşturma?

var arr = new Array(n); 

bu sorunun üstesinden gelebilirsiniz tek yolu aşağıda mı? Normal koşullarda

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

bu (bir yerine iki kod satırlarını kullanarak) büyük bir anlaşma değil, ama özlü dize çarpan kesmek kullanmak mümkün olmayan pişman:

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

olası yinelenen (http: // stackoverflow. com/questions/4852017/doğru-şekilde-initialize-an-diziler-uzunluk-in-javascript) –

+1

N-boyutlu bir dizi neden oluşturmalısınız? Dize çarpan fonksiyonunu bir "hack" kullanarak açıkladığınız göz önüne alındığında, jslint'in "new Array()" hakkında ne dediğini umursamaya başladım, ancak 'repeat()' işlevini bir for döngüsüyle kolayca uygulayabilirsiniz. ya da '.length =', eğer ihtiyacın tek sebebi buysa, yeni Array() '. – nnnnnn

+0

* "Kullanamadığım için pişmanlık duyuyorum ..." * JSLint'i kullanmanız gereken bazı kısıtlamalar var mı? –

cevap

2

JSLint olduğunu outsmart oldukça kolay.

sadece bunu yapabilirsiniz:

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

çalışır: [? Javascript oluşturarak dizinin uzunluğunu başlatmak için Uygun şekilde] arasında

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

Mükemmel! Bu benim aradığım şey :) –

+3

Sorun değil. Dikkat edilmesi gereken ilginç şey, linter etrafında çalışmak, aslında daha garip bir kod ürettiniz, bu yüzden linter, amaçlananın tersini yapıyor. Eğer buna çok şey katıyorsanız, diğer linterleri araştırmayı (veya proje liderine bakmayı) düşünebilirsiniz. –

+0

Gerçekten garipliği umursamıyorum. JSLint'in hack'i ihmal etmesi için bir hack olup olmadığını gerçekten merak ediyordum. –