Tengo dos objetos de matrices como la siguiente:
person: { 0: { firstName: John lastName: Doe avatar: https://sitename.com/filename.jpg }, etc.. } image: { 0: { Key: filename.jpg files: { srcSet: 'filename.jpg 256w' } } } Mi objetivo es hacer coincidir los objetos a través del valor encontrado en avatar con el valor en Key y, después de hacer coincidir, fusionar los objetos de las matrices en una nueva estructura de matriz como la siguiente:
person: { 0: { firstName: John lastName: Doe avatar: https://sitename.com/filename.jpg Key: filename.jpg files: { srcSet: 'filename.jpg 256w' } }, etc.. } Mi instinto me dice que algún tipo de .filter y .map encadenado al filtro podría ayudar a crear la nueva matriz de objetos, sin embargo, no estoy seguro de cómo hacer coincidir un valor parcial .
Puede hacer algo como esto llamando a Array.prototype.map() en Object.values(yourobject)
Después de llamar al mapa en los valores del objeto original, puede verificar si existe un elemento con la misma clave en su segundo objeto, si usa el operador de propagación para crear un nuevo objeto resultante con las propiedades combinadas y luego devolverlo
const person = { 0: { firstName: "John", lastName: "Doe", avatar: "https://sitename.com/filename.jpg" }, } const image = { 0: { Key: "filename.jpg", files: { srcSet: 'filename.jpg 256w' } } } const imageKey = (avatar) => { const arr = avatar.split('/'); return arr[arr.length - 1]; } const val = Object.values(person).map(v => { const found = Object.values(image).find(x => x.Key == imageKey(v.avatar)); if (found) return {...v, ...found }; else return {...v} }) console.log(val);No puede usar el mapa sobre objetos, pero puede usar Object.values (objeto) para obtener sus valores
const person = { 0: { firstName: "John", lastName: "Doe", avatar: "https://sitename.com/filename.jpg" }, } const image = { 0: { Key: "filename.jpg", files: { srcSet: 'filename.jpg 256w' } } } const getPersonImageKey = (person) => { return person.avatar.split("/").at(-1); } const mergedObjs = Object.values(person).map(person => { const relatedImage = Object.values(image).find(image => image.Key === getPersonImageKey(person)); return {...person, ...relatedImage}; }) const finalObj = {}; mergedObjs.forEach((obj, idx) => finalObj[idx] = obj); console.log(finalObj);