Agregar createElements: texto y valor sin el forLoop necesario a la matriz.
Intenté el mapa, forEach, pero en cuanto a la memoria... todavía está retrasado con numerosas entradas.
Por favor ayuda.
templateList example: ["a", "b", "c", "d", "e", "f"]; var templateList = new Array(); var selection = document.getElementsByName("name")[0]; for(var i = 0; i < templateList.length; i++) { var open = document.createElement("Option"); open.text = templateList[i]; open.value = templateList[i]; selection.add(open); }puede obtener un rendimiento un poco mejor utilizando un DocumentFragment para crear sus opciones y representarlas todas a la vez en el dom. Diría que no hay una forma no iterativa
Debido a que todos los nodos se insertan en el documento a la vez, solo se activa un reflujo y una representación en lugar de potencialmente uno para cada nodo insertado si se insertaran por separado.
var templateList = ["a", "b", "c", "d", "e", "f"]; var selection = document.getElementsByName("name")[0]; var opts = new DocumentFragment(); for(var i = 0; i < templateList.length; i++) { var open = document.createElement("Option"); open.text = templateList[i]; open.value = templateList[i]; opts.appendChild(open); } selection.appendChild(opts); <select name="name"> </select>Probé con js-bench y obtuve solo una ventaja mínima (+- 5%) aunque, en teoría, debería ser menos "retrasado"
Puede crear todas las cadenas de opciones y luego agregarlas a innerHTML de selection . Esto será muy eficiente en comparación con su solución.
const templateList = ["a", "b", "c", "d", "e", "f"], selection = document.getElementsByName("name")[0], options = templateList.map(v => ` <option value="${v}">${v}</option>`).join(''); selection.innerHTML = options; <select name="name"></select>