Tengo un mapa de javascript con una estructura como esta:
let map = {3 => 1, 15 => 2, 0 => 2, 8 => 3, 9 => 3}Necesito recibir las matrices de claves, y las claves con valores similares deben estar en la misma matriz.
[[3], [15,0],[8,9]]Esto es lo que he intentado:
let answers = []; let currentVal = 1; map.forEach((value, key)=>{ let subArr = []; if(value === currentVal){ subArr.push(key); answers.push(subArr); currentVal++; } }); return answers; Y devuelve [[3], [15], [8]]
Supongo que su mapa es un objeto, no un mapa por razones de legibilidad, pero si está usando Mapa allí, puede cambiar los métodos para obtener elementos, pero la idea principal se puede ver a continuación:
const data = { 3: 1, 15: 2, 0: 2, 8: 3, 9: 3 }; const customData = Object.entries(data).reduce((acc, [key, value]) => { if (value in acc) { acc[value].push(key); } else { acc[value] = [key]; } return acc; }, {}); const finalArray = Object.values(customData); console.log(finalArray); Ejemplo de edición con Map() :
const data = new Map([ [3, 1], [15, 2], [0, 2], [8, 3], [9, 3] ]); const customData = Array.from(data).reduce((acc, [key, value]) => { if (value in acc) { acc[value].push(key); } else { acc[value] = [key]; } return acc; }, {}); const finalArray = Object.values(customData); console.log(finalArray);Puede usar Object.entries y clave de desestructuración key, value pero cambio su lugar como value, key para que coincida con el mapa de estructura de datos proporcionado por OP:
let map = { 3: 1, 15: 2, 0: 2, 8: 3, 9: 3 }; const arr = []; for (const [value, key] of Object.entries(map)) { if (arr[key]) { arr[key].push(value); } else { arr[key] = [value]; } } console.log(arr.filter(Boolean)); // [[3], [15,0],[8,9]] NOTA arr.filter(Boolean) para eliminar valores falsos (vacíos) de la matriz ya que el índice 0 no tiene una matriz dentro.