Estoy enfrentando un problema al usar .map y .filter donde no puedo obtener el objeto que no es similar en dos objetos. Qué cambios debo hacer para obtener el objeto poco común de arrayObjTwo .
código
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);Un código de compilador: https://onecompiler.com/javascript/3xy92hpmp
Resultado Esperado:
const arrayObjTwo =[ { description: "Frontyard of home", spaceName: "Frontyard" } ]Gracias..
Su filtro para el resultado es incorrecto. Debería usar "object.spaceName" en lugar de solo "name" mientras recorre una matriz de objetos y no solo cadenas
// 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);Así que todo esto debería ser:
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);¡Estás cerca!
Tiene nombres en mayúsculas en su declaración de mapa, pero javascript distingue entre mayúsculas y minúsculas, por lo que el campo que está buscando "Nombre" no existe y, como tal, sus "nombres de objeto 1" no están definidos.
Deberías estar buscando obj.name
También debe compararlo con el campo "spaceName" de arrayObjTwo, no con el objeto completo.
Aquí está su código con estos pequeños cambios:
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);¿Necesitas esto?
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);