Estoy tratando de eliminar entradas de un objeto para que solo incluya aquellas que están en una matriz. Entonces tengo una matriz required :
const required = ['accountNumber', 'packRequested', 'collectionDate'] Y un objeto de touchedFields :
const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false }Esto es lo que busco:
const touchedFields = { accountNumber: true, collectionDate: false, packRequested: false }¿Cómo se puede lograr esto?
En su lugar, intenté crear una salida de matriz (ya que no pude hacer el objeto), recorrer cada entrada de objeto y recorrer cada clave de matriz, comparar valores y empujar a una nueva matriz si los valores coinciden:
let newArr = [] for (let [key, value] of Object.entries(requiredFields)) { Object.keys(touchedFields).forEach((cur) => { if (cur == value) { newArr.push({cur: value}) } }) } console.log(newArr)Pero incluso eso no establece los valores correctamente, ya que establece la clave como cur y no la variable cur real:
[{cur: 'accountNumber'}, {cur: 'packRequested'}, {cur: 'collectionDate'}]Cualquier ayuda sería muy apreciada.
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } let result = Object.fromEntries( Object.entries(touchedFields) .filter(([k,v]) => required.includes(k)) ) console.log(result)Usar el método Array.reduce
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const result = required.reduce((acc, key) => { acc[key] = touchedFields[key]; return acc; }, {}); console.log(result);Si desea modificar el objeto original, puede recorrer las claves y eliminar las que no están en la matriz requerida.
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const pruneObject = (obj, keys) => Object.keys(obj).forEach( key => !required.includes(key) && delete obj[key] ); pruneObject(touchedFields, required); console.log(touchedFields);Si no desea alterar el objeto original, puede recorrer la matriz y crear un nuevo objeto a partir de ella.
const required = ['accountNumber', 'packRequested', 'collectionDate'] const touchedFields = { accountNumber: true, sortCode: false, account: true, collectionDate: false, packRequested: false } const inclusivePick = (obj, keys) => Object.fromEntries( keys.map(key => [key, obj[key]]) ); const result = inclusivePick(touchedFields, required); console.log(result);