Tengo algunos datos, que se parecen a estos datos simulados:
const mockData = [ { "1": [ { val1: 0.9323809524, val2: 5789.12, val3: 84.467, val4: 189.12, val5: 8, bins: 1, }, { val1: 10.7328571429, val2: 5478.43, val3: 84.467, val4: -121.57, val5: 9, bins: 1, }, { val1: 1.4457142857, val2: 5647.59, val3: 84.467, val4: 47.59, val5: 10, bins: 1, }, ], "2": [ { val1: 0.9323809524, val2: 5289.12, val3: 84.467, val4: 189.12, val5: 8, bins: 2, }, { val1: 10.7328571429, val2: 5178.43, val3: 84.467, val4: -121.57, val5: 9, bins: 2, }, { val1: 1.4457142857, val2: 5547.59, val3: 84.467, val4: 47.59, val5: 10, bins: 2, } ], "3": [ { val1: 0.9323809524, val2: 5089.12, val3: 84.467, val4: 189.12, val5: 8, bins: 3, }, { val1: 10.7328571429, val2: 5178.43, val3: 84.467, val4: -121.57, val5: 9, bins: 3, }, { val1: 1.4457142857, val2: 5247.59, val3: 84.467, val4: 47.59, val5: 10, bins: 3, }, ], }, ]; Entonces, usando useState , simplemente configuré eso en:
const [data, setData] = useState(mockData) Lo que quiero hacer es iterar a través de estos datos para obtener 3 matrices con los valores de, por ejemplo, val2 . Entonces, básicamente, el resultado debería ser algo como:
const newData = [ [5789.12, 5478.43, 5647.59], [5289.12, 5178.43, 5547.59], [5089.12, 5178.43, 5247.59] ]Ahora, si trato de hacerlo un poco manualmente, como:
console.log(Object.keys(data[1].map((x) => x.val2)).map((val) => data[1].map((x) => x.val2)[val]));Luego obtengo una matriz para la primera entrada. Pero si trato de iterar a través de él, para crear una nueva matriz de matrices, por ejemplo:
const [newData, setNewData] = useState([]); setNewData( data.map((y, i) => ({ Object.keys(y.map((x) => x.val2)).map((val) => y.map((x) => x.val2)[val]), })) ); Acabo de recibir el error Uncaught TypeError: y.map is not a function . Intenté solo Object.keys en algunos lugares, sin suerte, pero puede que me confunda por qué no funciona.
Entonces, ¿qué me estoy perdiendo aquí?
{ Object.keys(y.map((x) => x.val2)).map((val) => y.map((x) => x.val2)[val]), } Su map no devuelve valores correctamente debido a un par de corchetes extra {} . Puedes comprobar la lógica a continuación.
const data = [ { "1": [ { val1: 0.9323809524, val2: 5789.12, val3: 84.467, val4: 189.12, val5: 8, bins: 1, }, { val1: 10.7328571429, val2: 5478.43, val3: 84.467, val4: -121.57, val5: 9, bins: 1, }, { val1: 1.4457142857, val2: 5647.59, val3: 84.467, val4: 47.59, val5: 10, bins: 1, }, ], "2": [ { val1: 0.9323809524, val2: 5289.12, val3: 84.467, val4: 189.12, val5: 8, bins: 2, }, { val1: 10.7328571429, val2: 5178.43, val3: 84.467, val4: -121.57, val5: 9, bins: 2, }, { val1: 1.4457142857, val2: 5547.59, val3: 84.467, val4: 47.59, val5: 10, bins: 2, } ], "3": [ { val1: 0.9323809524, val2: 5089.12, val3: 84.467, val4: 189.12, val5: 8, bins: 3, }, { val1: 10.7328571429, val2: 5178.43, val3: 84.467, val4: -121.57, val5: 9, bins: 3, }, { val1: 1.4457142857, val2: 5247.59, val3: 84.467, val4: 47.59, val5: 10, bins: 3, }, ], }, ]; const results = data.map((item) => Object.keys(item).map(key => item[key].map((value) => value.val2))).flat(); console.log(results)