Tengo un problema que realmente no sé cómo abordar de una buena manera.
Tengo una matriz de objetos que se ve más o menos así:
[ { name: "horse", newName: "owl" } { name: "owl", newName: "horse" } { name: "frog", newName: "dog" } ]
Quiero eliminar los objetos "reflejados" de esta matriz, lo que da como resultado una matriz como esta:
[ { name: "frog", newName: "dog" } ]
Básicamente necesito encontrar objetos con claves y valores opuestos.
Escenarios más complejos:
[ { name: "horse", newName: "frog" } { name: "owl", newName: "horse" } { name: "frog", newName: "owl" } ] // Result: []
[ { name: "horse", newName: "frog" } { name: "dog", newName: "cat" } { name: "owl", newName: "horse" } { name: "frog", newName: "owl" } { name: "monkey", newName: "worm" } { name: "cat", newName: "dog" } ] // Result: [{ name: "monkey", newName: "worm" }]
En el primer caso, simplemente recorrería la matriz y si se encuentra un objeto como este:
{name: obj1.value2, newName: obj1.value1}
Los empalmaría a ambos
Pero no tengo idea de cómo abordar la situación más compleja cuando se deben eliminar 3 o más objetos. ¿Alguna pista?
De antemano gracias por su tiempo
puedes hacerlo usando la función de filter
en la matriz
var data = [ { name: "horse", newName: "frog" }, { name: "dog", newName: "cat" }, { name: "owl", newName: "horse" }, { name: "frog", newName: "owl" }, { name: "monkey", newName: "worm" }, { name: "cat", newName: "dog" } ]; let noMirrored = data.filter(one => { return ( !data.some(element => element.name === one.newName) && !data.some(element => element.newName === one.name) ); }); console.log(noMirrored);
Use algunos para comprobar el valor actual.
var array = [{ name: "horse", newName: "frog" }, { name: "dog", newName: "cat" }, { name: "owl", newName: "horse" }, { name: "frog", newName: "owl" }, { name: "monkey", newName: "worm" }, { name: "cat", newName: "dog" } ] array.forEach(t => { var nameFound = array.some(a => a.name == t.newName); var newNameFound = array.some(a => a.newName == t.name); if (!nameFound && !newNameFound) { console.log(t); } });