過去 4 時間、JavaScript の一部に固執しています。
問題は、次のように 2 つの配列間の類似性をどのようにカウントするかです。
arrayA = [a,b,c,d,e,f,g];
arrayB = [c,d,e];
答えは3つです。現時点で私が持っている唯一のコードは、無限ループを生成します:(
助けてください
過去 4 時間、JavaScript の一部に固執しています。
問題は、次のように 2 つの配列間の類似性をどのようにカウントするかです。
arrayA = [a,b,c,d,e,f,g];
arrayB = [c,d,e];
答えは3つです。現時点で私が持っている唯一のコードは、無限ループを生成します:(
助けてください
arrayA
1 つの方法は、それぞれをチェックして にあるかどうかを確認し、新しい配列の をarrayB
取得してフィルタリングすることです。length
arrayA.filter(function(el) {
return arrayB.indexOf(el) >= 0;
}).length;
これは以下を使用します。
最初の 2 つは古いブラウザーでは利用できないことに注意してください。
どうぞ(クロスブラウザソリューション):
[このメソッドは IE8 やその他の古いブラウザーでは機能しないことに注意してください。その.filter()
ため、次のアプローチをお勧めします]
1) 関数を定義します。
function count_similarities(arrayA, arrayB) {
var matches = 0;
for (i=0;i<arrayA.length;i++) {
if (arrayB.indexOf(arrayA[i]) != -1)
matches++;
}
return matches;
}
2)それを呼び出します:
var similarities = count_similarities(arrayA, arrayB);
alert(similarities + ' matches found');
古いブラウザのサポートを気にしないのであれば、孤独な日の答えを強くお勧めします。
それが役立つことを願っています。
1 つの配列の各要素を取得し、arrayA.indexOf(arrayB[i]) を使用して他の要素に存在するかどうかを確認する必要があります。-1 が返されない場合は、カウント変数をインクリメントします。最後にあなたの答えです。
$.inArray() 関数を使用してこれを行うことができます
$(function () {
arrayA = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
arrayB = ['c', 'd', 'e'];
var matchCount = 0;
$.each(arrayB, function (index, value) {
if ($.inArray(value, arrayA) != -1)
matchCount++;
});
alert("Matched elements : " + matchCount);
});