2016-04-13 14 views
0

配列内の単語の合計出現数を調べようとしています。
Here私は解決策を発見し、それを少し変更:配列内の単語のすべての出現を見つけよう

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を。

しかし、3の代わりに1しか得られないので、最初の要素が見つかるだけです(word)。しかし、どのようにすべての要素を見つけるために、wordを含む?

+2

'リターンのn +(val.indexOf(検索)> = 0);' – Emissary

+0

あなたは "、 "単語3倍語単語"[あなたはこれをカウントするかどうかをお答えくださいすることができ単語 "]"を4回の出現として、あるいは2回だけ出現させるか?それが4でなければならない場合、これは実際に与えられた答えのほとんどより少し複雑になります。 – Katana314

+0

@ Katana314:私の場合、配列の要素内に単語が複数出現することはありません。 – user1170330

答えて

1

これを試してみてください:ここで

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が見つからない場合は、文字列内の部分文字列の最初の出現のインデックスを返しString.prototype.indexOf()、または-1を使用する必要が3

+0

なぜjQuery.eachを使用するように切り替えましたか? – TAGraves

+0

これは実際には '[単語が単語の単語であることを考慮していません]複数の単語の単語"、 "単語"] ' – Katana314

+0

@ Katana314コメントでOPが言うように、それは彼のための検索文字列を繰り返さない。 – Abhi

0

になります:

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

演算子===は、等しいオブジェクトと等しいタイプを意味します。

「検索」単語を含む各配列要素を検索する場合は、別の演算子を使用する必要があります。

ので、filterindexOfを使用して、別の可能なアプローチは、次のとおりです。あなたがString#indexOfを使用することができ

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);

関連する問題