Tengo esta matriz de datos en Javascript:
// console.log(currentMembers.members) // ************************* // CURRENT MEMBERS // ************************* // [ // new ObjectId("62385d8caee17d13a1762b39"), // new ObjectId("6238a480170aff10d16ccd86"), // new ObjectId("6238a480170aff10d16ccd86"), // new ObjectId("6238a608170aff10d16ccd89") // ]Quiero eliminar de la matriz un valor que coincida con la variable "memberToRemove". Entonces .filter() debería ser suficiente para realizar esto, pero no es así y estoy perdido.
try { const newListofMembers = currentMembers.members.filter( member => member._id !== memberToRemove ); const updatedMembers = await Group.findOneAndUpdate( { _id: groupId }, { members: newListofMembers } ); console.log('Users successfully updated.'); return res.status(200).json({ success: true, members: newListofMembers }); } catch (err) { console.log(err); next(err); }Cuando realizo esta acción, no sucede nada, cuando hago console.log(newListOfMembers), el filtro no parece funcionar en absoluto, ignora el miembro => miembro !== miembro a quitar. El miembro a eliminar es 6238a608170aff10d16ccd89.
Más simple, puede cambiar su filtro en este member => String(member._id) === memberToRemove
Pero la forma correcta es
const _ = require('lodash'); const { Types } = require('mongoose'); const newListofMembers = currentMembers.members.filter( member => !_.isEqual(member._id, Types.ObjectId(memberToRemove)) ); Puede reemplazar member => !_.isEqual(member._id, Types.ObjectId(memberToRemove)) con el member => !_.isEqual(member, Types.ObjectId(memberToRemove)) o !item.equals(memberToRemove)