Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparing two arrays and merging without duplicates

var a = [{id: 14679333, name: "Churchill Downs", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Gulfstream", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true"}, 
         {id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true"}]


var b = [{id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Charles Town", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true"},
         {id: 14679333, name: "Los Alamitos", eventStatusCode: "A", isActive: "true"}]

Code:

 for(var i=0; i< b.length;i++){
   if((b[i].typeName || b[i].name) != (a[i].typeName || a[i].name)){
    var c= a.concat(b)
     console.log("after concat",c)
   }
 }

I am trying to compare both arrays and merge into single array without duplicates but I am getting this output:

c= [{id: 14679333, name: "Churchill Downs", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Gulfstream", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Charles Town", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true"},
{id: 14679333, name: "Los Alamitos", eventStatusCode: "A", isActive: "true"}]

Expected output:

c = [{id: 14679333, name: "Churchill Downs", eventStatusCode: "A", isActive: "true"},
     {id: 14679333, name: "Gulfstream", eventStatusCode: "A", isActive: "true"},
     {id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true"},
     {id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true"},
     {id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true"},
     {id: 14679333, name: "Charles Town", eventStatusCode: "A", isActive: "true"},
     {id: 14679333, name: "Los Alamitos", eventStatusCode: "A", isActive: "true"}]

1 Answers

You could take a Set and look for same name and filter the array of all items.

var a = [{ id: 14679333, name: "Churchill Downs", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Gulfstream", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true" }],
    b = [{ id: 14679333, name: "Santa Anita", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Charles Town", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Golden Gate Fields", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Remington Park", eventStatusCode: "A", isActive: "true" }, { id: 14679333, name: "Los Alamitos", eventStatusCode: "A", isActive: "true" }],
    result = [...a, ...b]
        .filter(
            (s => ({ name }) => !s.has(name) && s.add(name))
            (new Set)
        );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
like image 130
Nina Scholz Avatar answered Dec 08 '25 04:12

Nina Scholz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!