Oye, estoy usando titiritero y cuando ejecuto este código:
console.log(dealsId[i]); for (var i = 0; i < sizes.length; i++) { var refIdClasses = await sizes[i].$eval('input', a => a.getAttribute('class')); if (refIdClasses != 'disabled') { var refId = await sizes[i].$eval('input', a => a.getAttribute('value')); var size = await sizes[i].$eval('input', a => a.getAttribute('data-size')); refIds.push({ size: size, refId: refId }); } } console.log(dealsId[i]);El ID de ofertas funciona antes del ciclo for y después del ciclo dice indefinido y estoy muy confundido sobre por qué.
Var i tiene un alcance global, por lo que al usar var i=0 definitivamente está creando un conflicto de alcance. Utilice let u otro nombre de variable en su lugar.
Ese es el problema con var s. Puede declararlos y volver a declararlos en el mismo ámbito sin previo aviso.
Supongo que declaraste una var i en el código antes de lo que mostraste, pero la vuelves a declarar en el bucle for . i < sizes.length es la condición para romper el bucle, el bucle se rompe i ahora está fuera de los límites de su matriz, por lo tanto, no está definido (si dealsId tiene un tamaño inferior a la matriz de sizes ).
No está "sin relación" ya que usó la misma variable para recorrer 2 matrices diferentes. Como no sabemos si las dos matrices tienen exactamente el mismo tamaño, no podemos identificar con una precisión del 100 % lo que está pasando, pero me quedo con eso.
Esto se debe a que su ciclo for también está usando i para iterar, posiblemente en conflicto con i en dealsId[i] .
La posible solución podría ser cambiar la variable en el bucle for de i a j.
El código se convierte en:
console.log(dealsId[i]); for (var j = 0; j < sizes.length; j++) { var refIdClasses = await sizes[j].$eval('input', a => a.getAttribute('class')); if (refIdClasses != 'disabled') { var refId = await sizes[j].$eval('input', a => a.getAttribute('value')); var size = await sizes[j].$eval('input', a => a.getAttribute('data-size')); refIds.push({ size: size, refId: refId }); } } console.log(dealsId[i]);