Estoy tratando de lograr lo siguiente:
var arr = [ {name: 'width', value: 10}, {name: 'height', value: 20}, ] arr.reduce((ack, item)=>{ ack.width = item.value ack.height = item.value return ack },{}) //Expected output: {width: 10, height: 20} //Actual output: {width: 20, height: 20} ¿Quizás no entiendo cómo funciona .reduce() al 100%?
Necesitas tomar el name como clave.
const array = [{ name: 'width', value: 10 }, { name: 'height', value: 20 }], result = array.reduce( (object, { name, value }) => ({ ...object, [name]: value }), {} ); console.log(result);El método reduce ejecuta una función de devolución de llamada en cada elemento de la matriz, por lo que en su problema, en cada iteración tiene un objeto que contiene la propiedad de name y value . puedes lograr tu objetivo así:
let arr = [ {name: 'width', value: 10}, {name: 'height', value: 20}, ] let result = arr.reduce((ack, item)=>{ ack[item.name] = item.value return ack },{}) console.log(result);¿Quizás no entiendo cómo funciona .reduce() al 100%?
Parece que sí. Leer los documentos
Cada vez que se llama a la función reducer , ack es lo que se devolvió por última vez desde reducer (o el valor inicial si es el primer paso) y item es el elemento actual.
Ayuda a hacer esto:
arr.reduce((ack, item)=>{ console.log(ack); // this will help you understand ack[item.name] = ack[item.value] return ack },{})