Tengo estas 2 matrices:
const data = [ { url: 'google.com', title: 'google', social: false, corporate: true }, { url: 'facebook.com', title: 'facebook', social: true, corporate: true } ]; const valuesToExtract = ['url', 'title'];Necesito llegar a este resultado:
const result = [ { url: 'somepath[0].url', title: 'somepath[0].title' }, { url: 'somepath[1].url', title: 'somepath[1].title' } ]Intenté de esta manera:
const newArray = []; for (let i = 0; i < data.length; i++) { for (const value of valuesToExtract ) { const newObject = {}; newObject[value] = `somepath[${i}].${value}`; newArray.push(newObject); } }Pero el resultado que obtengo es:
const result = [ { url: 'somepath[0].url' }, { title: 'somepath[0].title' }, { url: 'somepath[1].url' }, { title: 'somepath[1].title' } ]¿Cómo puedo hacerlo mejor?
Solo necesito cambiar un poco dónde poner cosas en tus bucles anidados. Necesitas dos bucles:
datavaluesToExtract Por lo tanto, solo desea push su newObject una vez que el segundo ciclo haya terminado (es decir, una vez que valuesToExtract extraer hayan terminado de extraer). De esta manera, obtiene un newObject para cada elemento de data .
const data = [ { url: 'google.com', title: 'google', social: false, corporate: true }, { url: 'facebook.com', title: 'facebook', social: true, corporate: true } ]; const valuesToExtract = ['url', 'title']; const newArray = []; for (let i = 0; i < data.length; i++) { // Create a new Object for every data item const newObject = {}; for (const value of valuesToExtract ) { newObject[value] = `somepath[${i}].${value}`; } newArray.push(newObject); } console.log(newArray)