list.forEach(el, i) { var isTrue = true; if (isTrue && i == 0) { ary[0] = obj.innerText; } if (isTrue && i == 1) { ary[0] = obj.closest(list[0]).innerText; ary[1] = obj.innerText; } if (isTrue && i == 2) { ary[0] = obj.closest(list[0]).innerText; ary[1] = obj.closest(list[1]).innerText; ary[2] = obj.innerText; } //same pattern continues up to dozens of if statements })Hola, soy nuevo en la programación JS. la lista contiene selectores css. obj es el elemento DOM. ¿Cómo puedo mejorar este código?
Todas las declaraciones if parecen superfluas y repetitivas, ¿por qué no hacerlo todo a la vez? Extraiga todo .textContent de los elementos coincidentes, luego coloque el obj.textContent al final.
const ary = Array.from( { length: i - 1 }, (_, i) => obj.closest(list[i]).textContent ).concat(obj.textContent); Es casi seguro que desea .textContent , no .innerText .
Si es posible que la list no contenga la misma cantidad de elementos que la cantidad de condiciones i que tiene, simplemente corte la matriz a la longitud deseada antes de concatenar en el obj.textContent final.
Dado que el valor de isTrue no cambia, el cuerpo puede ser:
ary[i] = obj.textContent; while (i--) { ary[i] = obj.closest(list[i]).textContent; }Es probable que tampoco necesite el bucle forEach , simplemente inicialice i en ary.length - 1 .