Tengo esta función en JS
function getMap(objectList) { const objectMap = new Map(); IDS.foreach(id => { const attribute = objectList.find(object => object.getId() === id); if (attribute) { objectMap.set(id, attribute); } else { objectMap.set(id, null); } }Este es un bucle anidado debido a la búsqueda dentro del bucle for. ¿Cómo podría simplificarse esto? Si el bucle anidado no se puede simplificar, ¿se pueden simplificar otras partes?
Suponiendo que los ID de objeto sean únicos, parece que todo lo que tiene que hacer es llamar a getId en cada objeto de antemano. El operador condicional se puede usar en else de if / si no, si lo desea.
function getMap(objectList) { const objectsById = new Map( objectList.map(object => [object.getId(), object]) ); const objectMap = new Map(); for (const id of IDS) { objectMap.set(id, objectsById.get(id) || null); } }Podría crear una matriz con entradas null para cada ID, seguida de entradas para las que realmente tiene valores en objectList y pasar esa matriz al constructor Map :
function getMap(objectList) { return new Map([ ...IDs.map(id => [id, null]), ...objectList.map(object => [object.getId(), object]) ]); }Uso de código nativo con una simple devolución de llamada
const result = (IDS || []).map(function(id, idx, arr) { const pos = (objectList || []).findIndex(object => object.getId() === id); const output = []; output[id] = (pos >= 0 ? objectList[pos] : null); return output; });Espero que esto ayude... ;D