首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在所有检查通过后才更新。

只有在所有检查通过后才更新。
EN

Stack Overflow用户
提问于 2022-03-28 15:32:11
回答 3查看 47关注 0票数 0

我只想在所有检查通过之后才更新对象数组。我有表示所有项目的对象数组和其他对象数组(所有可用的库存)。

我想检查是否所有的文章都是库存的,那么我只想更新股票数组。这是我的代码:

代码语言:javascript
复制
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;
      }
    }
   });
 });

这个解决方案的问题是,它更新了id = 1的库存,尽管id = 2还不够。我试图检查是否所有的物品都有足够的数量,并更新(减)他们的库存数组。因此在本例中,代码将更新股票数组,如下所示:

代码语言:javascript
复制
stock = [
    {
      "id": "1",
      "stock": "2"
    },
    {
      "id": "2",
      "stock": "6"
    },
    {
      "id": "3",
      "stock": "2"
    },
    {
      "id": "4",
      "stock": "2"
    }
  ];

有人能建议我怎么解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2022-03-28 15:50:22

您可以使用Array.prototype.find()。注意:这个片段假设所有文章都有一个"id"属性,它不检查"art_id"

代码语言:javascript
复制
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)

然后,您可以在

代码语言:javascript
复制
if (haveEnough) {
 // Do something
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-28 15:57:47

我假设articles数组中的articles键应该是id

不幸的是,您不能在一个循环中完成所有这些工作,而是必须首先遍历所有的文章来确定它们的库存是否足够,然后再循环它们来更改现有的库存:

代码语言:javascript
复制
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);
  });
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-28 16:13:48

在您的项目数组中有一个不一致的地方,我认为每个项目都有一个"art_id",而不是一些"id“和"art_id”。

您只需使用Array.prototype.find函数找到您的文章,然后通过isAvailable函数检查一篇文章在股票列表中的数量是否正确。

现在,您可以使用Array.prototype.every函数来实现您想要的功能!只有当数组的每个元素都满足条件时,才会返回true,在本例中是isAvailable函数。

这里有一个简单的小提琴:

代码语言:javascript
复制
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")
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71649963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档