comparing values from two different arrays and finding the diff

P

psmahesh

Hi folks,

I am comparing two arrays and removing matches from the second array
from the first array.
Can someone take a look at this code below and mention if this is okay
and perhaps if there is a better way to achieve it

for(i=0;i<arrayA.length;i++){
for(j=0;j<arrayB.length;j++){
if(arrayA==arrayB[j])
{
arrayA.splice(i,1);
}
}
}

cheers
Mahesh
 
L

Lee

(e-mail address removed) said:
Hi folks,

I am comparing two arrays and removing matches from the second array
from the first array.
Can someone take a look at this code below and mention if this is okay
and perhaps if there is a better way to achieve it

for(i=0;i<arrayA.length;i++){
for(j=0;j<arrayB.length;j++){
if(arrayA==arrayB[j])
{
arrayA.splice(i,1);
}
}
}



After you've executed your splice, arrayA takes on the value that
had been arrayA[i+1]. This new value will not be compared to arrayB[j]
or to any element of arrayB[] preceding arrayB[j].


--
 
D

Dr John Stockton

JRS: In article <[email protected]>,
dated Thu, 27 Jul 2006 11:58:20 remote, seen in
news:comp.lang.javascript, (e-mail address removed) posted :
I am comparing two arrays and removing matches from the second array
from the first array.
Can someone take a look at this code below and mention if this is okay

Probably not.
and perhaps if there is a better way to achieve it
Certainly.

for(i=0;i<arrayA.length;i++){
for(j=0;j<arrayB.length;j++){
if(arrayA==arrayB[j])
{
arrayA.splice(i,1);
}
}
}


You have design & implementation faults.

In each J scan, arrayA is looked up; that should be outside the J
loop.

In each I & J scan, .length is redetermined for every move. The length
of one array is constant; that of the other changes only at splice; the
lengths should be set into variables LA, LB.

More importantly, taking as an example the case of no matches, you do
two nested scans, taking time proportional to the product of the lengths
LA, LB. But if you can .sort the arrays, which takes less than time
L^2, you can then scan along the arrays in order looking for matches, as
in a merge sort.

If you scan backwards, using a while loop, then removing an element
will not affect the indexing of elements yet to be considered.


If the elements of the arrays necessarily take the form of identifiers,
or can be trivially converted to such (e.g. by prepending an 'X'), then
you can create from A a new Object, C, whose elements are named by the
values of A and whose values are unimportant. You can then scan B
similarly, looking to see if C already contains each element. The look-
ups must take size-dependent time, but will be efficient.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,905
Latest member
Kristy_Poole

Latest Threads

Top