Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

215
Visualizações
Actualizar solo después de que se hayan pasado todas las comprobaciones

Quiero actualizar la matriz de objetos solo después de que se hayan pasado todas las comprobaciones. Tengo una matriz de objetos que representan todos los artículos y otra matriz de objetos que representa todo el stock disponible.

Quiero verificar si todos los artículos están en stock, solo quiero actualizar la matriz de stock. Aquí está mi código:

 const articles = [{ "id": "1", "quantity": "4" }, { "id": "2", "quantity": "8" }, { "id": "4", "quantity": "1" }]; let stock = [ { "id": "1", "stock": "6" }, { "id": "2", "stock": "6" }, { "id": "3", "stock": "2" }, { "id": "4", "stock": "2" } ]; articles.map(article => { stock.map(item => { if(item.id === article.id){ if(article.quantity <= item.stock){ item.stock = item.stock - article.quantity; } else { console.log('error'); throw error; } } }); });

El problema con esta solución es que actualiza el stock para id = 1 aunque id = 2 no es suficiente. Estoy tratando de verificar si todos los artículos están en stock en cantidad suficiente y actualizarlos (menos) en la matriz de stock. Entonces, en este caso, el código actualizará la matriz de stock de esta manera:

 stock = [ { "id": "1", "stock": "2" }, { "id": "2", "stock": "6" }, { "id": "3", "stock": "2" }, { "id": "4", "stock": "2" } ];

¿Puede alguien sugerir cómo puedo arreglar esto?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Puede usar Array.prototype.find() . Nota: el fragmento asume que todos los artículos tienen una propiedad "id" , no busca "art_id" .

 const articles = [{ "id": "1", "quantity": "4" }, { "id": "2", "quantity": "8" }, { "id": "4", "quantity": "1" }]; let stock = [{ "id": "1", "stock": "6" }, { "id": "2", "stock": "6" }, { "id": "3", "stock": "2" }, { "id": "4", "stock": "2" } ]; // Use Array.prototype.some() to check for items that don't have enough stock const haveEnough = !articles.some(article => // Turns "1" into 1 parseInt( // Find the stock with the same id as the article stock.find(stock => stock.id === article.id).stock ) < parseInt(article.quantity)) console.log(haveEnough)

A continuación, puede actualizar el stock en

 if (haveEnough) { // Do something }
about 4 years ago · Juan Pablo Isaza Relatório

0

Supongo que la clave art_id en la matriz de articles debería ser id .

Desafortunadamente, no puede hacerlo todo en un ciclo y, en cambio, primero tendrá que recorrer todos los artículos para averiguar si su stock es suficiente y luego recorrerlos nuevamente para cambiar el stock existente:

 const articles = [ { id: '1', quantity: '4', }, { id: '2', quantity: '5', }, { id: '4', quantity: '1', }, ]; let stock = [ { id: '1', stock: '6', }, { id: '2', stock: '6', }, { id: '3', stock: '2', }, { id: '4', stock: '2', }, ]; // Are there any articles that do not have enough stock const outOfStockArticles = articles.find((article) => { const articleStock = stock.find((stock) => stock.id === article.id); return Number.parseInt(article.quantity) > Number.parseInt(articleStock.stock); }); // If there are no out of stock articles - change existing stock values if (!outOfStockArticles) { articles.forEach((article) => { const articleStock = stock.find((stock) => stock.id === article.id); articleStock.stock = Number.parseInt(articleStock.stock) - Number.parseInt(article.quantity); }); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Hay una inconsistencia en su matriz de artículos, supongo que cada artículo tiene un "art_id", y no algunos un "id" y algunos un "art_id".

Simplemente puede encontrar su artículo usando la función Array.prototype.find, y luego con la función isAvailable verificar que un artículo esté presente en la cantidad correcta en la lista de existencias.

¡Ahora puedes usar la función Array.prototype.every que hace exactamente lo que quieres! Devolverá verdadero solo si todos los elementos de la matriz satisfacen la condición, en nuestro caso, la función isAvailable .

Aquí un violín simple:

 const articles = [{ "art_id": "1", "quantity": "4" }, { "art_id": "2", "quantity": "8" }, { "art_id": "4", "quantity": "1" }]; const stock = [{ "id": "1", "stock": "6" }, { "id": "2", "stock": "6" }, { "id": "3", "stock": "2" }, { "id": "4", "stock": "2" } ]; const isAvaiable = (article) => { return stock.find(element => element.id === article.art_id).stock >= article.quantity; } if (articles.every(isAvaiable)) { console.log("I can update") } else { console.log("I cannot update") }

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda