2016-04-13 43 views
0

Dizideki bir sözcüğün toplam oluşum sayısını bulmaya çalışıyorum.
Here ben bir çözüm buldum ve bunu biraz değişmiş:Dizideki sözcüğün tüm oluşumlarını bul

var dataset = ["word", "a word", "another word"]; 
var search = "word"; 
var count = dataset.reduce(function(n, val) { 
    return n + (val === search); 
}, 0); 

Here is the fiddle.

Ancak, 3 yerine sadece 1 elde ediyorum. Bu nedenle yalnızca ilk elemanın yalnızca word olduğunu bulur. Ama word içeren tüm öğeleri nasıl bulabilirim?

+2

'dönüş n + (val.indexOf (arama)> = 0); – Emissary

+0

Bunu [ "kelimesi süreleri üç kelime kelime" saymak isteyip cevap misiniz', " Dört "veya" kelimesiyle "2" kelimesini mi? Dört olsaydı, bu aslında verilen cevapların çoğundan biraz daha karmaşık hale gelir. – Katana314

+0

@ Katana314: Benim durumumda, bir dizinin bir öğesi içinde bir sözcüğün çoklu oluşumu olmayacak. – user1170330

cevap

1

bu deneyin: İşte

var dataset = ["word", "a word", "another word"]; 
var search = "word"; 
count = 0; 

jQuery(dataset).each(function(i, v){ if(v.indexOf(search) != -1) {count ++} }); 

, count bulunmazsa eğer dizede alt dizenin ilk oluşum indeksi dönmek String.prototype.indexOf() veya -1 kullanmak zorunda 3.

+0

Neden jQuery.each'i kullanmaya başladınız? – TAGraves

+0

Bu aslında "[" kelimesi şu anki kelime sözcüğü kelimesi kelimesi kelimedir "," kelime "]' – Katana314

+0

@ Katana314 olarak açıklanamaz. OP yorumlarda da belirttiği gibi, arama dizgisi onun için tekrarlanmayacaktır. – Abhi

0

olacak :

var dataset = ["word", "a word", "another word"]; 
var search = "word"; 
var count = dataset.reduce(function(n, val) { 
    return n + (val.indexOf(search) > -1 ? 1 : 0); 
}, 0); 
0

Operatör === şu anlama gelir: eşit nesne ve eşit tür.

Eğer 'arama' sözcüğünü içeren her dizi elemanını arıyorsanız, farklı bir operatör kullanmanız gerekir.

Yani, filter ve indexOf kullanarak başka olası yaklaşım, şudur: String#indexOf kullanabilirsiniz

var dataset = ["word", "a word", "another word"]; 
 
var search = "word"; 
 
var count = dataset.filter(function(val) { 
 
    return val.indexOf(search) != -1; 
 
}).length; 
 

 
document.write('N. words: ' + count)

0

.

var dataset = ["word", "a word", "another word"], 
 
    search = "word", 
 
    count = dataset.reduce(function(r, a) { 
 
     return r + !!~a.indexOf(search); 
 
    }, 0); 
 

 
document.write(count);

İlgili konular