Estoy trabajando con una serie de objetos que originalmente se ven así
const data = [ { data: 1, children: [], }, { data: 2, children: [], }, ];Eventualmente, estos objetos pueden crecer indefinidamente llenando la propiedad de los niños con objetos que comparten la forma de los objetos originales. Por ejemplo
const data = [ { data: 1, children: [ { data: 3, children: [], }, { data: 4, children: [], } ], }, { data: 2, children: [], }, ];Necesito eso cuando obtengo nuevos datos como este
[ { data: 10, children: [] }, { data: 12, children: [] }, ]y eso debe colocarse, por ejemplo, en la propiedad child del objeto con la propiedad data con valor 4. ¿Cómo puedo reemplazar toda la matriz con los nuevos valores? Como mencioné antes, los objetos anidados pueden crecer llenando la propiedad de los niños indefinidamente.
const data = [ { data: 1, children: [ { data: 3, children: [], }, { data: 4, children: [ { data: 10, children: [] }, { data: 12, children: [] }, ], } ], }, { data: 2, children: [], }, ];Actualización 0 : necesito una nueva copia de la matriz con sus objetos actualizados porque trabajo en angular y para que se actualice un componente de árbol de nodos, necesito una nueva copia de valores
Puede tener recursividad para encontrar coincidencias de data y actualizar children en consecuencia
const newData = [ { data: 10, children: [] }, { data: 12, children: [] }, ] const data = [ { data: 1, children: [ { data: 3, children: [], }, { data: 4, children: [], } ], }, { data: 2, children: [], }, ]; function updateData(currentData, newData, dataValue) { if(currentData && Array.isArray(currentData) && currentData.length > 0) { for(let item of currentData) { //found item.data === 4 if(item.data === dataValue) { //update children with your new data item.children = newData; break; } updateData(item.children, newData, dataValue) } } } //clone your data here const clonedData = JSON.parse(JSON.stringify(data)) updateData(clonedData, newData, 4) console.log({clonedData}) console.log("===========") console.log({data}) .as-console-wrapper { max-height: 100% !important; top: 0; }Puede analizarlo usando JSON (aunque no detectará funciones)
const data = [ { data: 10, children: [] }, { data: 12, children: [] }, ]; const newObj = JSON.parse(JSON.stringify(data)); newObj[0].data = 15; console.log(newObj[0].data); // 15 console.log(data[0].data); // 10O puedes usar lodash cloneDeep