2016-04-03 15 views
0

Alfabedeki bir harfin eşleşmelerini bir dizgedeki harflere sayan bir işlev yazmaya çalışıyorum. Daha sonra sayımı, sayı olarak bir ilişkilendirici diziye depolarım.String.match.length dönen dizi. Tam sayı değeri bekleniyordu.

Sorunum, string.match(regExpression) || [].length dizisinin dönen bir dizidir. Benim beklentim, maçın uzunluğu ile eşleşen bir tamsayı değeri döndürecektir. String.prototype.match() yönteminin bir dizi döndürdüğünü biliyorum, ancak benim anlayışım (yöntemin biçimsel açıklamasına dayanarak) Sting.length'in bir sayı döndürdüğüdür.

Neyi yanlış yapıyorum?

function countLetters(string) { 
    //create array with letters of alphabet 
    var alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); 
    var counts = []; 

    for (i = 0; i < alphabet.length; i++) { 
    var regExpression = new RegExp(alphabet[i], "g"); 
    counts[alphabet[i]] = string.match(regExpression) || [].length 
    } 
    return counts; 
} 
+0

string.match' o zaman bir dizi döndürür başarılı 'Eğer

var data = 'However beautiful the strategy, you should occasionally look at the results.'; //Winston Churchill // returns an array function method_A(phrase) { var o = [], r; 'abcdefghijklmnopqrstuvwxyz'.split('').forEach(function(s, i) { r = new RegExp(s, 'gi'); o[i] = (phrase.match(r) || []).length; }); return o; } // returns an object function method_B(phrase) { var o = {}, r; 'abcdefghijklmnopqrstuvwxyz'.split('').forEach(function(s, i) { r = new RegExp(s, 'gi'); o[s] = (phrase.match(r) || []).length; }); return o; } stdout.innerHTML = ( 'input: ' + data + '\n' + 'method_A: ' + JSON.stringify(method_A(data), false, '') + '\n' + 'method_B: \n' + JSON.stringify(method_B(data), false, ' ') );
<xmp id="stdout"></xmp>

... – elclanrs

+0

Eh' array' görmezden ve ihtiyacınız olduğunu bunun dışında 'value' seç. – John

+0

Bence .length diziyi görmezden gelir ve bana aradığım değeri verirdi. @john Bunu nasıl önerirsin? – sharly

cevap

0

Yanlış bir şey yapmıyoruz ama String.match doğru davranıştır bir dizi döndürür doğru olduğunda bu durumda, yanlış değer bekliyoruz.

Bu yöntem normal ifade karşı bir dize eşleşen zaman eşleşmeleri almak için kullanılır ve bu bir dizi hatamı fark

+0

Teşekkürler, Ahmad ve maçtan bir dizi bekliyordum. Ancak, 'uzunluk' yönteminin bana "sayımlar" ilişkilendirici dizisine saklamak için belirli bir değer vereceğini düşündüm. Bu gerçekleşmeyen kısım ve nedenini anlamıyorum. – sharly

2

iade eşleştirildi. string.match(regExpression) || [].length hattı, length yöntemini çağırmadan önce eşleşme yönteminin ve mantıksal işleç etrafında parantezin eksik olmasından dolayı beklenmedik şekilde davranıyordu. Diziyi döndürdüğümden ya da boş bir dizinin uzunluğunu. Bir nesneyi counts değiştirdim.

+0

Yükseltildi. Aslında hiç kimsenin bir nesnenin yerine bir dizinin kullanımını yakalamadığına şaşırdım. Yine de, çoğu kez, çözmeye çalışan saatler geçirdiğiniz basit hatalar. : D – Roberto

0

Bence zaten ben, yani eksik parantezler ve yanlış veri türünü işaret gidiyordu 2 sorunları keşfetti beri OP'ın kendi cevap oylama varım:

İşte sabit fonksiyondur. Yine de, zaten kodu yazdığımdan beri yayınlayacağım.