Tengo una matriz que se ve así, esta matriz se llama Columnas
[ { "key":"event_tag", "value":"Event tag", "order":2, "filter":{ "value":[], "type":"options", "options":["refresh","done_sent","send","level","ack","create"] } }, { "key":"created_timestamp", "order":0, "value":"Created timestamp" }, { "key":"workflow_tag", "value":"Workflow tag", "order":1, "filter":{ "value":[], "type":"options", "options":[] } } ]Tengo otra matriz que se ve así, se llama rowData
[ { "created_timestamp":"2022-04 04T16:21:44.327926Z", "created_by":"xxxxxxxxx", "workflow_tag":"xxxxx", "event_tag":"refresh", "user_email":"xxxxx", "counterparty":"GAMMA", "success":true, "chat_message_id":"xxxxx", "chat_stream_id":"xxxxx", "chat_platform":"xxxxx", "routing_rule":null,"notification":13600 }]Lo que quiero hacer en la segunda matriz es eliminar todos los atributos del atributo donde la clave no coincide con una clave: valor de la primera matriz,
Entonces, en la primera matriz, cada objeto tiene un atributo "key" , si el valor de ese atributo clave existe en el segundo objeto de la matriz, quiero conservarlo, si no, quiero eliminarlo, así que en base a los primeros objetos de la matriz. la matriz final para la segunda matriz debería verse así,
[ { "created_timestamp":"2022-04 04T16:21:44.327926Z", "workflow_tag":"xxxxx", "event_tag":"refresh", }]No puedo averiguar cómo hacer esto, ¿debería hacer algún tipo de mapa en la matriz de datos de fila y hacer algún tipo de condición para verificar que la clave existe en la matriz de columnas y, de ser así, cómo?
const newRowData = rowData.map((obj) => { if(Object.keys(obj).includes(columns.key)) { return obj[key]; } });Para ser honesto, estoy bastante perdido, todo lo que quiero es una nueva matriz de objetos y que esos objetos solo incluyan las claves que coinciden con el atributo clave de la matriz de columnas.
Primero, las claves de creación deben usarse desde las columnas usando el mapa. Usando map en rowData y Object.assign .
const cols = [ { key: "event_tag", value: "Event tag", order: 2, filter: { value: [], type: "options", options: ["refresh", "done_sent", "send", "level", "ack", "create"], }, }, { key: "created_timestamp", order: 0, value: "Created timestamp", }, { key: "workflow_tag", value: "Workflow tag", order: 1, filter: { value: [], type: "options", options: [], }, }, ]; const rowData = [ { created_timestamp: "2022-04 04T16:21:44.327926Z", created_by: "xxxxxxxxx", workflow_tag: "xxxxx", event_tag: "refresh", user_email: "xxxxx", counterparty: "GAMMA", success: true, chat_message_id: "xxxxx", chat_stream_id: "xxxxx", chat_platform: "xxxxx", routing_rule: null, notification: 13600, }, ]; const keys = cols.map(({ key }) => key); const output = rowData.map((item) => Object.assign( {}, ...keys.map((key) => ({ [key]: item[key] })) ) ); console.log(output);esto funcionará
const data = [ { "key":"event_tag", "value":"Event tag", "order":2, "filter":{ "value":[], "type":"options", "options":["refresh","done_sent","send","level","ack","create"] } }, { "key":"created_timestamp", "order":0, "value":"Created timestamp" }, { "key":"workflow_tag", "value":"Workflow tag", "order":1, "filter":{ "value":[], "type":"options", "options":[] } } ] const rowData = [ { "created_timestamp":"2022-04 04T16:21:44.327926Z", "created_by":"xxxxxxxxx", "workflow_tag":"xxxxx", "event_tag":"refresh", "user_email":"xxxxx", "counterparty":"GAMMA", "success":true, "chat_message_id":"xxxxx", "chat_stream_id":"xxxxx", "chat_platform":"xxxxx", "routing_rule":null,"notification":13600 }] const extractData = (row) => { const keys = data.map(d => d.key) return row.map(r => Object.fromEntries(Object.entries(r).filter(([k, v]) => keys.includes(k)))) } console.log(extractData(rowData))