es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Hay alguna forma de combinar el cuerpo de la función de este bucle forEach?

Tengo esta función forEach que reemplaza el texto en una celda de tabla después de que se envían algunos datos. Estoy reemplazando tres celdas de tabla diferentes según la fila de la tabla y los tengo separados en tres declaraciones diferentes.

Como esto:

replaceData.forEach((item, i) => {
$(.tableData tbody tr:eq(${item.index}))
.children([“td:eq(6)”])
.text(values[i] === null ? “-” : values[i]);
$(.tableData tbody tr:eq(${item.index}))
.children(“td:eq(7)”)
.text(reason[i]);
$(.tableData tbody tr:eq(${item.index}))
.children(“td:eq(8)”)
.text(notes[i] === null ? “-” : notes[i]);
});

Intenté combinar esas tres declaraciones de esta manera, pero esto no funcionó. ¿Alguien sabe cómo puedo combinar estas tres declaraciones, si es posible? ¿O es la única forma de lograr esto mantenerlas como sus propias declaraciones?

$(.tableData tbody tr:eq(${item.index}))
.children([“td:eq(6)”, “td:eq(7)”, “td:eq(8)”])
.text([
values[i] === null ? “-” : values[i],
reason[i],
notes[i] === null ? “-” : notes[i]
]);

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La código que intentaste usar no funcionaría porque el método text() espera un argumento de tipo cadena, pero en su lugar pasaste una matriz. Por lo tanto, necesitas usar el método each() para iterar sobre cada celda de la tabla y establecer su texto por separado.

    Puedes simplificar un poco tu código usando el método map() para crear una matriz de textos para establecer y luego usar each() para establecer cada texto en la celda de tabla correspondiente:

    replaceData.forEach((item, i) => {
      const texts = [
        values[i] === null ? "-" : values[i],
        reason[i],
        notes[i] === null ? "-" : notes[i]
      ];
      $(`.tableData tbody tr:eq(${item.index})`)
        .children("td:eq(6), td:eq(7), td:eq(8)")
        .each((j, cell) => $(cell).text(texts[j]));
    });
    

    En este código, el método map() crea una matriz texts que contiene los textos para establecer en cada celda de tabla. Luego, el método each() itera sobre las tres celdas de tabla y establece su texto utilizando el valor correspondiente de la matriz texts.

    Ten en cuenta que puedes combinar el selector "td:eq(6), td:eq(7), td:eq(8)" para seleccionar las tres celdas de tabla en una sola declaración.

Comments are closed.