Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

620
Vistas
¿Cómo obtener el último valor de una identificación específica en una matriz usando javascript?

Tengo una función que almacena los valores de una fila en un evento de matriz onkeyup. Sin embargo, hay instancias en las que almacenaría los mismos valores de fila pero difieren en la cantidad y el total pero la misma identificación. ¿Cómo lo almacenaría en la matriz de manera que solo guardara el conjunto de valores más actual de una identificación específica? Sé que es un poco confuso, pero echa un vistazo a la imagen de abajo. Gracias por la ayuda.

ingrese la descripción de la imagen aquí

Me gustaría guardar el ff:

 {id:"1", qty:"4", price:"45", total:"180"} {id:"2", qty:"3", price:"10", total:"30"} {id:"3", qty:"50", price:"12", total:"600"} {id:"4", qty:"60", price:"12", total:"720"}

Mi código:

 var arrayVar = []; var data; $(function(){ $('#tbl-po-list').on( 'keyup change' , 'input[type="number"]' ,function(){ $(this).parents('.info').find('.total').val($(this).val() * $(this).parents('.info').find('.price').val()); data = { id: $(this).parents('.info').find('.prod-id').val(), qty: $(this).val(), price: $(this).parents('.info').find('.price').val(), total: $(this).parents('.info').find('.total').val() } arrayVar.push(data); for(var i = 0; i < arrayVar.length; i++){ console.log(arrayVar[i]); } }); });
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes lograr eso si reemplazas:

 arrayVar.push(data);

por:

 for(var i = 0; i < arrayVar.length; i++){ if (arrayVar[i].id === data.id) break; // found the same id! } arrayVar[i] = data;

Si el bucle no encuentra el mismo id , entonces después del bucle igualaré arrayVar.length , y así la asignación será como un empujón.

Si, por otro lado, se encuentra la identificación , entonces el bucle sale y la asignación reemplazará lo que haya antes en ese elemento de la matriz.

Una versión más concisa de lo mismo:

 for(var i = 0; i < arrayVar.length && arrayVar[i].id !== data.id; i++); arrayVar[i] = data;
over 4 years ago · Santiago Trujillo Denunciar

0

Parece maduro para un poco de golf de código. Aquí está mi intento:

 o=data.reduce((a,v)=>a[v.id]=v&&a,{});Object.keys(o).map(k=>o[k]);

Codigo original:

 obj = data.reduce((accum, value, i) => { accum[value.id] = value; return accum; }) out = Object.keys(obj).map(key => obj[key]);

Esto funciona mediante el uso de reducir para acumular valores en un objeto (usar la identificación como clave significa que las filas con la misma identificación se sobrescribirán) y luego extrae los valores del objeto.

over 4 years ago · Santiago Trujillo Denunciar

0

Debe eliminar el valor de la matriz usando splice() dentro de su ciclo for si se encuentra:

 var id = $(this).parents('.info').find('.prod-id').val(); for(var i = 0; i < arrayVar.length; i++){ if(arrayVar[i]['id'] == id){ arrayVar.splice(i, 1); } }

Ejemplo

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda