tengo este objeto:
{ "clicked": 0, "delivered": 0, "effective": 0, "enqueued": 0, "errors": 0, "forwarded": 0, "read": 0, "received": 0, "recover_sent": 0, "routing": 0, "sent": 0 }Quiero dividirlo en dos objetos, el primero debe tener 4 propiedades: recibido, errores, enviado y entregado; el segundo necesita tener el resto
Como esto:
obj1 = { "received": 0 "errors": 0, "sent": 0 "delivered": 0, } obj2={ "clicked": 0, "effective": 0, "enqueued": 0, "forwarded": 0, "read": 0, "recover_sent": 0, "routing": 0, }Si no le importa crear variables temporales para almacenar los valores de las claves, simplemente puede usar la asignación de desestructuración usando el patrón de descanso.
const obj0 = { "clicked": 0, "delivered": 0, "effective": 0, "enqueued": 0, "errors": 0, "forwarded": 0, "read": 0, "received": 0, "recover_sent": 0, "routing": 0, "sent": 0 } const {received, errors, sent, delivered, ...obj2} = obj0; const obj1 = {received, errors, sent, delivered}; console.log(obj1); console.log(obj2);Aunque probablemente seguiría la ruta de desestructuración, no está claro si el conjunto de claves se conoce en el momento de la compilación.
Puede lograr esto con un conjunto de claves adquiridas dinámicamente de la siguiente manera:
const data = { "clicked": 0, "delivered": 0, "effective": 0, "enqueued": 0, "errors": 0, "forwarded": 0, "read": 0, "received": 0, "recover_sent": 0, "routing": 0, "sent": 0 } const obj1Keys = ["received", "errors", "sent", "delivered"]; const entries = Object.entries(data); const obj1 = Object.fromEntries(entries.filter(([k]) => obj1Keys.includes(k))) const obj2 = Object.fromEntries(entries.filter(([k]) => !obj1Keys.includes(k))) console.log(obj1, obj2)Es posible que desee encapsular la respuesta de krzysztof krzeszewski en una función anónima para evitar las variables globales temporales:
const obj0 = { "clicked": 0, "delivered": 0, "effective": 0, "enqueued": 0, "errors": 0, "forwarded": 0, "read": 0, "received": 0, "recover_sent": 0, "routing": 0, "sent": 0 }; const [ obj1, obj2 ] = (o => { const { received, errors, sent, delivered, ...o2 } = o; const o1 = { received, errors, sent, delivered }; return [ o1, o2 ]; })(obj0); Si necesita llamarlo varias veces, considere separarlo en una función dedicada y adecuada (como " pick_and_separate(obj) ").