Estoy tratando de eliminar el objeto si el objeto coincide, no quiero comparar ninguna clave de objeto, solo quiero comparar el objeto completo con la matriz del objeto, y si coincide, entonces tengo que eliminar ese objeto de la matriz original.
let originalArray = [ {name: 'abc', country: 'eng'}, {name: 'xyz', country: 'ind'}, {name: 'pqr', country: 'us'} ] let objectToBeRemove = [ {name: 'pqr', country: 'us'} ] console.log(originalArray);Rendimiento esperado:
[ {name: 'abc', country: 'eng'}, {name: 'xyz', country: 'ind'} ]No puedo descifrar cómo puedo comparar objetos, puedo hacerlo por id o cualquier clave, pero estoy haciendo algo genérico, por lo que en algunos casos puede que la ID no esté presente, por eso quiero comparar objetos.
Una forma es usar Array#filter con Array#some + JSON.stringify() para comparar.
Tenga en cuenta que Array#filter devuelve una nueva matriz. Entonces la variable necesita ser reasignada.
let originalArray = [ {name: 'abc', country: 'eng'}, {name: 'xyz', country: 'ind'}, {name: 'pqr', country: 'us'} ]; let objectToBeRemove = [ {name: 'pqr', country: 'us'} ]; originalArray = originalArray.filter(obj => objectToBeRemove.some(objToRemove => JSON.stringify(objToRemove) !== JSON.stringify(obj) ) ); console.log(originalArray); Nota: En mi opinión, usar JSON.stringify() es un poco primitivo para la comparación de objetos. Por ejemplo, la verificación fallaría si las propiedades están en un orden diferente {country: 'us', name: 'pqr'} . Mejor manera sería hacer una comparación profunda. Por ej. usando _.isEqual de la biblioteca loadash . Vea aquí para más información.
Usando loadash
let originalArray = [ {name: 'abc', country: 'eng'}, {name: 'xyz', country: 'ind'}, {name: 'pqr', country: 'us'} ]; let objectToBeRemove = [ {country: 'us', name: 'pqr'} ]; originalArray = originalArray.filter(obj => objectToBeRemove.some(objToRemove => !_.isEqual(objToRemove, obj) ) ); console.log(originalArray); <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>Puede usar la función "filtro" para hacerlo: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
var myArr = [{name: "toto"}, {name: "tata"}, {name: "tutu"}]; var toRemove = {name: "tata"}; let ret = myArr.filter(function(el) { return el.name != toRemove.name; });O para eliminar varios elementos:
var myArr = [{name: "toto"}, {name: "tata"}, {name: "tutu"}]; var toRemove = [{name: "tata"}, {name: "tutu"}]; for (var i = 0; i < toRemove.length; i++) { let index = myArr.findIndex((el) => { // Search item index to remove return el.name == toRemove[i].name; }); if (index != -1) myArr.splice(index, 1); // Remove item in found index }Para comparar la igualdad del objeto completo, puede usar el método JSON.stringify() .
Ejemplo;
JSON.stringfy(originalArray[i]) === JSON.stringfy(objectToBeRemove)