Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

630
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!