arr1 = [ { nodeId: 1, xvalue: 200, yvalue: 300, }, ... ] arr2 = [ { parentNode: 1, childNode:3, }, ... ]arr1 tiene la identificación del nodo y los datos de las coordenadas xy del nodo. y arr2 tienen un vínculo entre el nodo, parentNode y childNode.
Necesito hacer una nueva matriz para la coordenada xy de parentNode y los datos de coordenadas xy de childNode como este
arr3 = [ { sourceX: 200, sourceY: 300, targetX: 500, targetY: 600, } ]¿Cómo puedo hacer una matriz como esta?
Usaría una función de map y luego buscaría las uniones.
const joined = arr2.map(it=>{ const parent = arr1.find(a=>a.nodeId === it.parentNode) const child = arr1.find(a=>a.nodeId === it.childNode) return { sourceX: parent.xvalue, sourceY: parent.yvalue, targetX: child.xvalue, targetY: child.yvalue, } }La siguiente puede ser una posible solución para lograr el objetivo deseado:
Fragmento de código
const getNewArr = (ar1, ar2) => ( ar2.map( // iterate over 'ar2' ({parentNode, childNode}) => { // de-structure iterator for parentNode, childNode const {xvalue: sourceX, yvalue: sourceY} = ar1.find( ({nodeId}) => (nodeId === parentNode) // match 'ar1' nodeId with parent ) ?? {xvalue: 'notFound', yvalue: 'notFound'}; // if no match found const {xvalue: targetX, yvalue: targetY} = ar1.find( ({nodeId}) => (nodeId === childNode) // match 'ar1' nodeId with child ) ?? {xvalue: 'notFound', yvalue: 'notFound'}; // no match found return {sourceX, sourceY, targetX, targetY} } ) ); const arr1 = [ { nodeId: 1, xvalue: 200, yvalue: 300, }, { // the childNode must have a matching 'id' nodeId: 3, xvalue: 500, yvalue: 600, }, ]; const arr2 = [ { parentNode: 1, childNode: 3, } ]; console.log(getNewArr(arr1, arr2));Explicación
Los comentarios en línea en el fragmento de código anterior describen cada paso. Para más aclaraciones, utilice los comentarios a continuación.
EDITAR
Uso de .map y .find junto con desestructuración y return implícito.
ar2.map( ({parentNode, childNode}) => ( {xvalue: sourceX, yvalue: sourceY} = ar1.find( ({nodeId}) => (nodeId === parentNode) ) ?? {xvalue: 'notFound', yvalue: 'notFound'}, {xvalue: targetX, yvalue: targetY} = ar1.find( ({nodeId}) => (nodeId === childNode) ) ?? {xvalue: 'notFound', yvalue: 'notFound'}, {sourceX, sourceY, targetX, targetY} ) )