我只想在所有检查通过之后才更新对象数组。我有表示所有项目的对象数组和其他对象数组(所有可用的库存)。
我想检查是否所有的文章都是库存的,那么我只想更新股票数组。这是我的代码:
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还不够。我试图检查是否所有的物品都有足够的数量,并更新(减)他们的库存数组。因此在本例中,代码将更新股票数组,如下所示:
stock = [
{
"id": "1",
"stock": "2"
},
{
"id": "2",
"stock": "6"
},
{
"id": "3",
"stock": "2"
},
{
"id": "4",
"stock": "2"
}
];有人能建议我怎么解决这个问题吗?
发布于 2022-03-28 15:50:22
您可以使用Array.prototype.find()。注意:这个片段假设所有文章都有一个"id"属性,它不检查"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)
然后,您可以在
if (haveEnough) {
// Do something
}发布于 2022-03-28 15:57:47
我假设articles数组中的articles键应该是id。
不幸的是,您不能在一个循环中完成所有这些工作,而是必须首先遍历所有的文章来确定它们的库存是否足够,然后再循环它们来更改现有的库存:
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);
});
}发布于 2022-03-28 16:13:48
在您的项目数组中有一个不一致的地方,我认为每个项目都有一个"art_id",而不是一些"id“和"art_id”。
您只需使用Array.prototype.find函数找到您的文章,然后通过isAvailable函数检查一篇文章在股票列表中的数量是否正确。
现在,您可以使用Array.prototype.every函数来实现您想要的功能!只有当数组的每个元素都满足条件时,才会返回true,在本例中是isAvailable函数。
这里有一个简单的小提琴:
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")
}
https://stackoverflow.com/questions/71649963
复制相似问题