Estoy tratando de generar una estructura de objeto así:
{nums: {500: 0, 600: 0}}Tengo una función que repite y devuelve números como se muestra en el objeto: 500 y 600. Sin embargo,
No importa lo que intente crear una estructura de objeto como la anterior, no funciona.
Esto es lo que tengo una matriz de objetos de la siguiente manera:
const scores = [ {score: 500}, {variant_id: 600} ]¿Cómo puedo recorrer la matriz de puntajes del objeto y obtener una estructura como: Número 0 en este ejemplo como un valor que se aplicará a todos los puntajes?
{nums: {500: 0, 600: 0}}Lo que he hecho es:
let filteredScores = []; for (let i = 0; i < scores.length; i++) { const element = scores[i]; filteredScores.push(element); }Sin embargo, esto no conduce a los resultados deseados.
¡Cualquier idea o entrada es muy apreciada!
Un par de ideas usando reduce() y Object.values() .
const scores = [ {score: 500}, {variant_id: 600} ]; const result1 = scores.reduce((o, item) => { o.nums[Object.values(item)[0]] = 0 return o; }, { nums: {} }); console.log(result1); // Basically the same thing, just more compact const result2 = { nums: scores.reduce((o, item) => ({...o, [Object.values(item)[0]]: 0}), {})}; console.log(result2);Puede usar Object.fromEntries junto con Array#map . (Para obtener el primer valor de propiedad de un objeto, puede recuperar el primer elemento de la matriz devuelta por Object.values ).
const scores = [ {score: 500}, {variant_id: 600} ]; const res = {nums: Object.fromEntries(scores.map(x => [Object.values(x)[0], 0]))}; console.log(res); var scores = [ {score: 500}, {variant_id: 600} ], result = scores.reduce( (r,o) => ( Object.keys(o).forEach(k => r.nums[o[k]] = 0) , r ) , {nums:{}} ); console.log(result);