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.

Mostrar un array en Angular

Tengo una lista que tiene tres columnas: menu, menuItem y order.

Quiero mostrar menu y menuItem por order como este ejemplo:


ninguno
Menú 1: orden 200
Menú 2: orden 230
Menú 3: orden 250
Ítem de menú 1: orden 210
Ítem de menú 2: orden 360

El resultado será:

  • Menú 1 tiene el ítem de menú 1 ( 200< 210 <230)
  • Menú 2: no tiene ítem de menú
  • Menú 3 tiene el ítem de menú 2 (porque 250 < 360).

Hago esto en dos listas (una para el menú y otra para el ítem de menú) y cuando el valor para el ítem está entre el índice del menú 1 y el último índice del menú 2, lo guardo en una nueva lista para mostrarlo. Pero tengo un problema con la nueva lista: no puedo tener el valor para cada menú.

¿Alguien podría ayudarme?


Para(i=0; i<list1.length ;i++){
let nextMenu = list1.order[i+1];
for (j=0;j<list2.length ;j++){
let item = list2[j].order;
let menu = list1[i].order;
if(menu < item < nextMenu){
This.list3.push(list2[j]);
}
}
}
descripción de la imagen

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la lógica del bucle para comprobar si un elemento pertenece a un menú. Una forma de solucionarlo es iterar a través de las listas de menús y elementos de menú al mismo tiempo y comprobar si un elemento pertenece al menú actual o al siguiente. Aquí tienes un fragmento de código actualizado que implementa este enfoque:

    let menuIndex = 0;
    for (let itemIndex = 0; itemIndex < list2.length; itemIndex++) {
      const item = list2[itemIndex];
      const currentItemOrder = item.order;
    
      // Comprobar si el elemento pertenece al menú actual o al siguiente.
      if (menuIndex < list1.length - 1 && currentItemOrder >= list1[menuIndex + 1].order) {
        menuIndex++;
      }
    
      // Añadir el elemento al menú correspondiente.
      if (list1[menuIndex].menu === item.menu) {
        list1[menuIndex].items.push(item.menuItem);
      }
    }
    

    Este fragmento de código asume que el array list1 contiene objetos con una propiedad menu (cadena de texto), una propiedad order (número) y una propiedad items (array), y que el array list2 contiene objetos con una propiedad menu (cadena de texto), una propiedad menuItem (cadena de texto) y una propiedad order (número).

    La variable menuIndex lleva un seguimiento del índice del menú actual. Iteramos a través de los elementos en list2 y comprobamos si el orden del elemento actual es mayor o igual al orden del siguiente menú. Si lo es, incrementamos menuIndex para pasar al siguiente menú. Luego, añadimos la propiedad menuItem del elemento actual al array items del objeto list1 correspondiente si la propiedad menu coincide.

    Esto debería darte el resultado deseado donde cada objeto de menú en list1 tiene un array items que contiene sus elementos de menú correspondientes.

Comments are closed.