I have 2 arrays that I need to compare against each other and return the count of the same.
Example: compare array1 [abcd] against array2 [adce]. Return would be 2,1
If I interpret correctly, you want to find a count of elements that are at the same, exact position and a count of elements that are present in both arrays but not at the same position.
var array1 = ['a', 'b', 'c', 'd'];
var array2 = ['a', 'd', 'c', 'e'];
var largerArray = (array1.length > array2.length)? array1 : array2;
var shorterArray = (largerArray == array1)? array2 : array1;
var count = {
exactPosition: 0, //elements at the exact position
wrongPosition: 0 /*elements present in both arrays but at the wrong position*/
};
//loop the larger array
for(var i = 0; i < largerArray.length; i ++) {
if(array1[i] == array2[i]) {
count.exactPosition ++;
}
//find elements at the wrong position in `largerArray`
else if(largerArray.indexOf(shorterArray[i]) != -1) {
count.wrongPosition ++;
}
}
alert(count.exactPosition);
alert(count.wrongPosition);
This isn't a rock-solid approach and would not work for duplicates.
Array.indexOf
Fiddle: Fiddle
You get 1
as output because length
is not defined in your code
var array1 = ['a','b','c','d'];
var array2 = ['a','d','c','e'];
var length = Math.min(array1.length,array2.length);
var countMatched = 0,countNotMatched = 0;
for(var index=0;index<length;index++)
{
if(array1[index] == array2[index])
countMatched++;
else if(array2.indexOf(array1[index]) >= 0)
countNotMatched++;
}
alert(countMatched );
alert(countNotMatched);
Demo Fiddle : http://jsfiddle.net/tCKE7/2/
There is a JS library UnderscoreJS which provides a number of useful method for processing JavaScript arrays. You can use its difference method:
_.difference(['a','b','c','d'], ['a','d','c','e']) // returns ["b"]