0

So I have here two different arrays.

const test = [
    { firstName: "John", lastName: "Doe" },
    { firstName: "Michael", lastName: "Sins" },
    { firstName: "Alex", lastName: "Brown" }
  ];
const test2 = [
    { firstName: "Lisa", lastName: "Shore" },
    { firstName: "John", lastName: "Doe" },
    { firstName: "Justin", lastName: "Park" },
  ];

What I want is to get the same values from the two arrays using ES6 (filter if possible) or in any way that fits to achieve the output. The result that I want to get is :

[{ firstName: "John", lastName: "Doe" }]
XypriL
  • 129
  • 1
  • 1
  • 9
  • What code have you attempted to solve this problem? You should add that to the question as a [mcve]. – Andy Sep 12 '21 at 07:42
  • Does this answer your question? [Simplest code for array intersection in javascript](https://stackoverflow.com/questions/1885557/simplest-code-for-array-intersection-in-javascript) – DecPK Sep 12 '21 at 07:44

3 Answers3

2

You can try using Array.prototype.filter() and Array.prototype.some()

const test = [
    { firstName: "John", lastName: "Doe" },
    { firstName: "Michael", lastName: "Sins" },
    { firstName: "Alex", lastName: "Brown" }
  ];

const test2 = [
    { firstName: "Lisa", lastName: "Shore" },
    { firstName: "John", lastName: "Doe" },
    { firstName: "Justin", lastName: "Park" },
  ];

const res = test.filter(t1 => test2.some(t2 => 
                    t1.firstName == t2.firstName 
                    && t1.lastName == t2.lastName
                  ));
console.log(res);
Mamun
  • 66,969
  • 9
  • 47
  • 59
1

You can do:

const test = [{ firstName: 'John', lastName: 'Doe' },{ firstName: 'Michael', lastName: 'Sins' },{ firstName: 'Alex',lastName: 'Brown' }]
const test2 = [{ firstName: 'Lisa', lastName: 'Shore' },{ firstName: 'John', lastName: 'Doe' },{ firstName: 'Justin',lastName: 'Park' }]


const getFullName = ({ firstName, lastName }) => firstName + lastName
const test2Names = test2.map(getFullName)
const result = test.filter((o) => test2Names.includes(getFullName(o)))

console.log(result)
Yosvel Quintero
  • 18,669
  • 5
  • 37
  • 46
1

Thi swill still works if you have object with properties other than firstName and lastName

const test = [
    { firstName: "John", lastName: "Doe" },
    { firstName: "Michael", lastName: "Sins" },
    { firstName: "Alex", lastName: "Brown" }
  ];
  
  const test2 = [
    { firstName: "Lisa", lastName: "Shore" },
    { firstName: "John", lastName: "Doe" },
    { firstName: "Justin", lastName: "Park" },
  ];
  
  const tempTest2 = test2.map(item => JSON.stringify(item));
  
  const result = test.filter(item => tempTest2.includes(JSON.stringify(item)));
  
  console.log(result);
navnath
  • 3,548
  • 1
  • 11
  • 19