0

I am facing some issue on using .map and .filter where I am unable to get the object which is not similar in two objects. What changes I need to do to get the uncommon object from arrayObjTwo.

code

const arrayObjOne = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arrayObjTwo =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const object1Names = arrayObjOne.map(obj => obj.Name); // for caching the result
const results = arrayObjTwo.filter(name => !object1Names.includes(name));
console.log(results);

One compiler code: https://onecompiler.com/javascript/3xy92hpmp

expected result:

const arrayObjTwo =[
        { description: "Frontyard of home", spaceName: "Frontyard" }
    ]

Thanks..

5
  • Isn't "Backyard" common? Commented Apr 6, 2022 at 5:36
  • spaceName !== name Commented Apr 6, 2022 at 5:36
  • also name instead of Name in the map Commented Apr 6, 2022 at 5:37
  • @ChongLipPhang yes my bad.. updated the question. Commented Apr 6, 2022 at 5:38
  • It's a little confusing when you ask about object2 and there's nothing called object2 in your code. Your question would be more clear if you referred to things by the same name in your question text and in your code. Commented Apr 6, 2022 at 5:41

3 Answers 3

1

Your filter for the result is wrong. You should be using the "object.spaceName" instead of just "name" as you're looping through an array of objects and not just strings

// So this line:
const results = arrayObjTwo.filter(name => !object1Names.includes(name));

// Should be:
const results = arrayObjTwo.filter(object => !object1Names.includes(object.spaceName));

// And you have a typo:
const object1Names = arrayObjOne.map(obj => obj.Name);

// Should be like so as keys and properties are case-sensitive:
const object1Names = arrayObjOne.map(obj => obj.name);

So this should all be:

const arrayObjOne = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arrayObjTwo =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const object1Names = arrayObjOne.map(obj => obj.name); // for caching the result
const results = arrayObjTwo.filter(object => !object1Names.includes(object.spaceName));
console.log(results);
Sign up to request clarification or add additional context in comments.

Comments

1

You're close!

You have capitalized names in your map-statement, but javascript is case-sensitive, so the field you're looking up "Name", does not exist, and as such your "object1Names" returns undefined.

You should be looking up obj.name

You also need to compare it to the arrayObjTwo's "spaceName"-field, not the entire object.

Here's your code with these small changes:

const arrayObjOne = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arrayObjTwo =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const object1Names = arrayObjOne.map(obj => obj.name); // for caching the result
const results = arrayObjTwo.filter(obj => !object1Names.includes(obj.spaceName));
console.log(results);

Comments

0

Do you need this?

const arr1 = [{
          countryCode: "US",
          description: " Backyard of home",
          id: "1234",
          location: "US",
          name: "Backyard",
          }]
// Array Object 2
const arr2 =[
    { description: "Backyard of home", spaceName: "Backyard" },
    { description: "Frontyard of home", spaceName: "Frontyard"},
]
const names = arr1.map(item => item.name); // for caching the result
console.log(names);
const res = arr2.filter(item => !names.includes(item.name));
console.log(res);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.