tengo una función que devuelve datos como este:
test = [ {test1:'test1'}, {test2:'test2'} ] results = [ {id:1, name:'Leo'} {id:2, name : 'Max'} ]tengo una función que empujo los datos a los resultados:
function addThisData(){ const age = [{id:1, name:'14'},{id:2, name : '15'}] results.push(age) }vuelve así:
results:[ {id:1, name:'Leo'} {id:2, name : 'Max'} [{id:1, name:'Leo'},{id:2, name : 'Max'}] }]¿Alguna ayuda para poner la edad en el objeto por id? Quiero lograr estos resultados:
{id:1,name:'leo',age:'14'} {id:2,name:'Max',age:'15'}Tenga en cuenta que estoy aprendiendo esto nuevo
¿Es posible hacerlo con foreach() ?
Su matriz de resultados debe ser una matriz de objetos, para hacerlo
const results = [{ 0: { id: 1, name: 'Leo' }, 2: { id: 2, name: 'Max' } }] const age = [{ id: 1, name: '14' }, { id: 2, name: '15' }] const newArr= [] //looping overelements of result to make a new array of objects results.forEach((e) => { for (let key in e) { newArr.push(e[key]) } }) console.log(newArr); const ages = [ { id: 1, age: '14' }, { id: 2, age: '15' } ] // finding the equalIds by looping over on both array and assigned a new age property in new array with the help .map let answer = [] for (let i = 0; i < ages.length; i++) { answer = newArr.map((elem) => { if (ages[i].id === elem.id) { elem.age = ages[i].age } return elem }) } console.log(answer);Puede usar el método de find (documentación aquí) para obtener el objeto que desea y luego actualizar el objeto.
null si no hay ningún objeto correspondiente a los parámetros. Entonces, en su caso, puede usar el método for each en una de las matrices (o cualquier bucle for que desee, como for i o for in ) y actualizar todos los valores usando find con la otra matriz
se puede ver como
Para cada elemento en la matriz de edad, busque el elemento que coincida con la identificación en la segunda matriz y agregue una propiedad basada en el valor de este elemento
const ages = [ {id: 1, age: '14'}, {id: 2,age: '15'} ] const results = [ {id: 1,name: 'Leo'}, {id: 2,name: 'Max'} ] //using foreach ages.forEach((age) => { const resultAssociated = results.find(result => result.id === age.id) if (resultAssociated !== null) { age.name = resultAssociated.name } }) console.log(ages)Utilice una función de mapa. Funciona igual que foreach pero te ayudará a devolver un valor al final.
Vaya con el siguiente código, logrará lo que necesita:
let test = [{id:1,name:'n1'}, {id:2,name:'n2'}]; let ages = [{id:1,age:12},{id:2,age:13}];Imagine que la prueba y las edades son las variables predeterminadas que obtiene con los siguientes valores. Para que pueda combinar ambos y fusionarlos en una matriz de objetos, debe aplicar funciones de mapa y búsqueda.
result = test.map(ele => { let ageObject = ages.find(e => e.id === ele.id); // #1 return {...ele, ...ageObject}; // #2 }); console.log(result); // array of objects with test and ages values merged#1 .find() en esta línea funciona como una función de búsqueda, busca el objeto en la matriz dada de objetos tomando como base la condición dada dentro. Devuelve el primer objeto encontrado con la condición coincidente en la matriz dada y lo devuelve.
#2 la sintaxis "...ele" se llama la sintaxis del 'operador de propagación' y distribuirá todos los elementos dentro del objeto dado. {...ele} es igual a {id:1,name:'n1'}. Esta sintaxis ayuda a formar un objeto con los elementos dados mientras elimina los duplicados, si los hay.
Puede optar por el tradicional bucle for dentro del enfoque de bucle for y comparar todos y cada uno de los elementos manualmente y fusionar objetos, pero intentarlo de esta manera le permitirá aprovechar las características de ES6.