por ejemplo, digamos que tengo la matriz,
const array = [{name: "first", val: 1}, {name: "second", val: 2}]
Quiero ejecutar una vez en esa matriz y al final de esa ejecución tener dos matrices:
const arrayOne = ["first", "second"];
const arrayTwo = [1,2];
Conseguir el primero es fácil, pero ¿conseguir los dos a la vez?
Recuerdo que habia una manera de hacerlo pero no la encontraba..
¡Agradecería cualquier ayuda!
Cualquier lógica de bucle ayudará
La implementación Array.reduce
será como a continuación
const array = [{ name: "first", val: 1 }, { name: "second", val: 2 }]; const [arrayOne, arrayTwo] = array.reduce((acc, curr) => { const { name, val } = curr; acc[0].push(name); acc[1].push(val); return acc; }, [[], []]); console.log(arrayOne, arrayTwo);
Puedes usar Array.reduce
para lograr esto:
const array = [{name: "first", val: 1}, {name: "second", val: 2}] const result = array.reduce((res, item) => { res[0].push(item.name) res[1].push(item.val) return res }, [[], []]) console.log(result)
La función extractArrays
es de propósito general y también se puede usar en otros casos.
function extractArrays(arr) { const result = {}; for (obj of arr) { for (key in obj) { result[key] = (result[key] || []).concat([obj[key]]); } } return result; } const array = [{name: "first", val: 1}, {name: "second", val: 2}]; const result = extractArrays(array); const arrayOne = result.name; const arrayTwo = result.val; console.log(`arrayOne=${arrayOne}`); console.log(`arrayTwo=${arrayTwo}`);