2015-06-20 43 views
8

Ben bu kod biraz anlamakta sorun yaşıyorum: Özellikletypescript/JavaScript forEach çağrı

stringsArray.forEach(s => { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + 
      (validators[name].isAcceptable(s) ? 
       ' matches ' : ' doesnt match ') + name); 
    } 
}); 

, s => { ... kısım gizemlidir. Her döngüdeki dizideki bir sonraki dizeye atanmış gibi görünüyor. Ama => bölümünün anlamı nedir? Düşünüyorum lambdas ile ilgili, ama ben takip etmiyorum.

cevap

12

Evet bu bir lambda (ECMAScript6 ve Ruby benzer örneğin yanı sıra diğer bazı dilleri.)

Array.prototype.forEach

üç argüman, element, index, array sürer, bu nedenle s element için kullanılan sadece parametre adıdır.

stringsArray.forEach(function(s) { 
    for (var name in validators) { 
     console.log('"' + s + '" ' + 
      (validators[name].isAcceptable(s) ? 
       ' matches ' : ' doesnt match ') + name); 
    } 
}); 

Yukarıdaki örnekte, bütün kod göstermedi, bu yüzden validators sadece düz bir nesne {} olduğunu varsayalım:

Düzenli ECMAScript5'i bu yazma gibi olur.

Verdiğiniz örnek için sözdizimi aslında ES6 sözdizimiyle aynıdır. the TypeScript handbook bu örnekte dışarı

Kontrol: Yine

example

+0

Teşekkürler ... biraz karışık ... Ben Ruby ancak JS oldukça yetkin olduğumu unutmayın. Bunun yerine TS'yi öğreniyorum çünkü benim için daha sağlam bir temel gibi görünüyor ... "s => {}" bir lambda'yı for_each'e ilk argüman olarak mı geçiriyor? Eğer öyleyse, lambda'nın kendisinde nasıl tekrar ortaya çıkabilir? İşte burası güdük (şu an için). Teşekkürler! – pitosalas

+1

@pitosalas, TypeScript, JavaScript'in üstüne buzlanıyor. Önce TypeScript'i öğrenmenin kötü bir fikir olduğunu düşünüyorum. .forEach'ın belgelerini okudunuz mu? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach –

+1

iyi biliyorum biraz js (ve paralel olarak çok hassas bir şekilde okuyordum), bu yüzden burada biraz aldatıcılık var Oldukça rahat hissediyorum. Ama işaret ettiğin bağlantıyı da takip edeceğim. Teşekkürler. – pitosalas