简体   繁体   中英

Comparing values in multiple arrays

I have two arrays where I need to compare values and get the duplicates. I wrote most of the code but seem to be stumped on the comparison.

Here is my code:

function compare(arr1, arr2) {
    for (var i = 0; i< arr1.length; i++) {
        for (var j = 0; j < arr2.length; j++) {
            if (arr1[i] == arr2[j]) {
                console.log[i];
            }
        }
    }
}

compare([5, 3, 2, 5, 1, 6], [6, 4, 2, 7, 10]);

I get the for loops to print all of the numbers, but for some reason the if statement comparison doesn't work. Is there something I am not getting about comparing values in arrays?

I am not looking for a straight up answer but guidance if possible.

Your code is quadratic in time since it iterates the second array for each item in the first array. A linear time solution is to convert the first array into a hash table, and then, for each item in the second one, instantly check if it is in the hash.

 function intersect(a, b) { var hash = {}; a.forEach(function(x) { hash[x] = 1 }); return b.filter(function(x) { return hash[x] === 1 }); } c = intersect([5, 3, 2, 5, 1, 6], [6, 4, 2, 7, 10]); document.write(c) 

Do note, however, that this only works if items to compare are primitives, you cannot put objects in a hash, so the code has to be quadratic:

 function intersect(a, b) { return a.filter(function(x) { return b.indexOf(x) >= 0 }); } a = {x:'a'}; b = {x:'b'}; c = {x:'c'}; d = {x:'d'}; i = intersect([a,b,c], [a,b,d]); document.write(JSON.stringify(i)); 

Regarding your bit about improving your current code, I suggest that you make your javascript more idiomatic, in particular,

  • get used to iteration methods instead of for loops
  • check the repertoire of built-in functions and use them wherever possible
  • and, for sanity's sake, never ever use ==

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM