Se puede cerrar de forma segura. Esta ya no es una pregunta válida.
Debería usar JSON.parse() para analizar JSON, ya body y el Message son cadenas JSON.
const records = [{ messageId: '1', body: '{"Message" : "{\\"detail\\": {\\"documentType\\": \\"pm1"\\", \\"documentDate\\": \\"2018-08-27 04:00:00\\"}}"}', }, { messageId: '2', body: '{"Message" : "{\\"detail\\": {\\"documentType\\": \\"pm3\\", \\"documentDate\\": \\"2018-08-27 04:00:00\\"}}"}', }, { messageId: '3', body: '{"Message" : "{\\"detail\\": {\\"documentType\\": \\"pm8\\", \\"documentDate\\": \\"2018-08-27 04:00:00\\"}}"}', }, ]; let output = []; let message = []; output = records.filter((resource) => { console.log('resource:', resource); const body = resource.body ? JSON.parse(resource.body) : {}; message = body.message ? JSON.parse(body.Message) : {}; console.log('message:', message); const documentType = message?.detail?.documentType?.toLowerCase() || ''; console.log('decoumentType:', documentType); const acceptedDocTypes = ['pm1', 'pm2', 'pm3', 'pm4', 'pm5']; return acceptedDocTypes.includes(documentType); });Si sus barras invertidas son consistentes, puede intentar eliminarlas usando una expresión regular:
const records = [ { messageId: '2', body: '{"Message" : "{\\"detail\\": {\\"documentType\\": \\"pm3\\", \\"documentDate\\": \\"2018-08-27 04:00:00\\"}}"}', }, { messageId: '3', body: '{"Message" : "{\\"detail\\": {\\"documentType\\": \\"pm8\\", \\"documentDate\\": \\"2018-08-27 04:00:00\\"}}"}', }, ] records.forEach(record => record.body = record.body.replace(/(\\+")/gmi, '"')) records.forEach(record => record.body = record.body.replace(/\s*"\s*\{/gmi, '{').replace(/\s*\}\s*"/gmi, '}')) records.forEach(record => record.body = JSON.parse(record.body)) console.log(records) De esta manera, primero limpia la entrada, luego puede aplicar JSON.parse . Esto no funciona con su primer ejemplo ya que hay una cita adicional sin escape, pero supongo que fue un error tipográfico en su escritura.