Compare 2 array's elements against each other

2020-03-26 07:08发布

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 as both a and c are in same position and d is in the wrong position.

function () {
    var index = 0;
    for (index = 0; index < length; index++) {
        if (array1[index] == array2[index]) {
            count++
        } 
    }
    return count
}

I'm getting a return of 1. I think that's because they equal in length that is why I'm getting a 1. So I'm thinking that I now need to put another for loop and have that loop go through the elements individually, but not sure how to do this. I could be completely wrong in what I have put above, if so, could someone explain the process to me please.

标签: javascript
3条回答
We Are One
2楼-- · 2020-03-26 07:20

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"] 
查看更多
孤傲高冷的网名
3楼-- · 2020-03-26 07:23

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/

查看更多
▲ chillily
4楼-- · 2020-03-26 07:45

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

查看更多
登录 后发表回答