si por ejemplo tengo un arreglo que contiene todos los mensajes enviados o recibidos al numero 123456789
Messages: [ { FromNumber: 9999, ToNumber: 123456789, Message: "first" }, { FromNumber: 9999, ToNumber: 123456789, Message: "second" }, { FromNumber: 123456789, ToNumber: 9999, Message: "me first2" }, { FromNumber: 123456789, ToNumber: 9999, Message: "me second2" }, { FromNumber: 123456789, ToNumber: 1234, Message: "me first" }, { FromNumber: 1234, ToNumber: 123456789, Message: "second" }, ],Y el resultado debería verse como
Messages: [ { FromNumber: 123456789, ToNumber: 9999, Message: "me second2" }, { FromNumber: 1234, ToNumber: 123456789, Message: "second" }, ],Intenté algo como esto pero no funcionó, ¿cuál sería la mejor solución?
Messages.filter( (v, i, a) => a.findLastIndex((t) => t.ToNumber === v.FromNumber && t.FromNumber === v.ToNumber) === i );Puede recolectar objetos por su clave, diferente de la clave común y devolver los objetos.
const messages = [{ FromNumber: 9999, ToNumber: 123456789, Message: "first" }, { FromNumber: 9999, ToNumber: 123456789, Message: "second" }, { FromNumber: 123456789, ToNumber: 9999, Message: "me first2" }, { FromNumber: 123456789, ToNumber: 9999, Message: "me second2" }, { FromNumber: 123456789, ToNumber: 1234, Message: "me first" }, { FromNumber: 1234, ToNumber: 123456789, Message: "second" }], common = 123456789, result = Object.values(messages.reduce((r, o) => { const key = o.FromNumber !== common ? o.FromNumber : o.ToNumber; r[key] = o; return r; }, {})); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }