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

357
Vistas
Cambiar un valor dentro de la matriz en un bucle forEach()

Mensaje : esta es una función que voy a implementar en mi primer proyecto (que es un sistema de punto de venta) usando Vue Js y escribí esta función usando JavaScript puro para simplificar esta pregunta. Así que estaría muy agradecido si alguien pudiera ayudarme con este problema para poder seguir construyendo mi proyecto de práctica. Gracias ❤️

La explicación de mi código: tengo una matriz vacía llamada newArray. Y una matriz llamada mainArray con algunos registros. Y he incluido un botón con un evento onClick que activa la función clicked() con un argumento pasado, que es 2 en este caso.

Lo que espero obtener: quiero buscar un registro dentro de newArray que contenga una identificación con 2 . Si se encuentra dicho registro, quiero agregar el valor de las existencias por 1 en el registro. Si dicho registro no se encuentra dentro de newArray, recorra mainArray y copie el registro que tiene la identificación de 2 y agréguelo a newArray y restablezca el stock a 1 (Entonces, cuando hacemos clic en el botón nuevamente, el registro que tiene id 2 ya está dentro de newArray, por lo tanto, quiero agregarle 1, por lo que el stock: 2 ahora). He intentado solucionar este problema y he adjuntado el código.

Resumen de acuerdo con mi proyecto : Recorrí mainArray en mi proyecto, por lo que cada registro tiene un botón con la función clicked(), con un atributo llamado productId, productId se pasa como argumento a la función clicked(), estoy esperando : Si hago clic en un botón , toma productId como argumento y la función recorre el newArray encontrando un registro que tiene una identificación igual a productId . Si dicho registro está allí , agregue stock por 1 . Si dicho registro no está allí, tome el registro de mainArray que tiene la identificación igual al valor de productId y colóquelo dentro de newArray configurando el valor de stock en 1 (stock: 1) . Entonces, cuando hago clic en el mismo botón que tiene el mismo valor de atributo, agregará 1 al stock en el registro del mismo valor igual a la identificación dentro de newArray (por lo tanto, el stock: 2 ahora) Si nuevamente hago clic en stock será stock: 3 y así sucesivamente sumando por 1.

 function clicked(inp){ const newArray = []; const mainArray = [ { id: 1, name: "Shoes",stock: 5, price: 10 }, { id: 2, name: "Bag",stock: 10, price: 50 }, ]; newArray.forEach((item) => { if(inp == item.id){ item.days = item.days + 1; } else { mainArray.forEach((element) => { if(inp == element.id){ newArray.push(element); } }); } }); console.log(newArray); }
 <button id="1" onClick="clicked(2)">Click me</button>

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Sugerencia : mueva newArray fuera de la función en la que se hizo clic, ya que se actualizará al hacer clic.

Implementación : puede usar el método Array.filter() en newArray para verificar si el registro según la identificación de entrada está disponible o no y luego, al usar Array.find() , puede filtrar en mainArray si no hay datos en newArray .

demostración en vivo :

 const newArray = []; function clicked(inp){ const mainArray = [ { id: 1, name: "Shoes",stock: 5, price: 10 }, { id: 2, name: "Bag",stock: 10, price: 50 }, ]; const findInNewArr = newArray.filter(item => inp === item.id); if (findInNewArr.length) { newArray[0].stock += 1; } else { const findInMainArray = mainArray.find(element => inp === element.id); if (findInMainArray) { findInMainArray.stock = 1; newArray.push(findInMainArray); } } console.log(newArray); }
 <button id="1" onclick="clicked(2)">Click me</button>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto es lo que realmente esperaba (Gracias a Rohìt Jíndal por darme la idea de hacer esto)

 const newArray = [{ id: 1, name: "Shoes",stock: 1, price: 10 }]; function clicked(inp){ const mainArray = [ { id: 1, name: "Shoes",stock: 5, price: 10 }, { id: 2, name: "Bag",stock: 10, price: 50 }, ]; const findInNewArr = newArray.filter(item => inp === item.id); if (findInNewArr.length > 0) { newArray.forEach((element) => { if(element.id === inp) { element.stock += 1; } }); } else { const findInMainArray = mainArray.find(element => inp === element.id); if (findInMainArray) { findInMainArray.stock = 1; newArray.push(findInMainArray); } } console.log(newArray); }
 <button id="1" onclick="clicked(2)">Click me</button>

about 4 years ago · Juan Pablo Isaza Denunciar

0

En su código, la función forEach no se ejecutará, porque newArray está vacío, por lo que no hay nada para iterar.

Puede usar findIndex para recorrer newArray y luego verificar si el índice es mayor que -1. Eso significaría que la matriz contiene un objeto con una identificación especificada.

 function clicked(inp){ const newArray = []; const mainArray = [ { id: 1, name: "Shoes",stock: 5, price: 10 }, { id: 2, name: "Bag",stock: 10, price: 50 }, ]; const inputIndex = newArray.findIndex((item) => item.id === inp); if (inputIndex > -1) { newArray[inputIndex].stock = newArray[inputIndex].stock + 1; } else { mainArray.forEach((element) => { if(inp == element.id){ newArray.push(element); } }); } console.log(newArray); }
about 4 years ago · Juan Pablo Isaza 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