Javascript 统一数组中的对象,获取总数
我正在努力解决这个问题 我正在开发一个带有条形码扫描仪的拣选应用程序。我有一个多步骤的表格,一次显示一个产品。用户可以选择项目并转到下一个项目,也可以跳过它,因为没有库存。 我现在有了这个对象数组,是在表单提交后获得的。它显示用户输入的代码,并使用产品的id(我创建了id)对其进行验证。如果代码“”为空,则是因为用户跳过了它Javascript 统一数组中的对象,获取总数,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我正在努力解决这个问题 我正在开发一个带有条形码扫描仪的拣选应用程序。我有一个多步骤的表格,一次显示一个产品。用户可以选择项目并转到下一个项目,也可以跳过它,因为没有库存。 我现在有了这个对象数组,是在表单提交后获得的。它显示用户输入的代码,并使用产品的id(我创建了id)对其进行验证。如果代码“”为空,则是因为用户跳过了它 [ { "orderid": "12696", "id": 3929, "
[
{
"orderid": "12696",
"id": 3929,
"name": "Eucaliptus 90 Gr",
"quantity": 3,
"code": "3929"
},
{
"orderid": "12696",
"id": 3929,
"name": "Eucaliptus 90 Gr",
"quantity": 3,
"code": "3929"
},
{
"orderid": "12696",
"id": 3929,
"name": "Eucaliptus 90 Gr",
"quantity": 3,
"code": ""
},
{
"orderid": "12696",
"id": 2739,
"name": "Hellmanns 232 Ml",
"quantity": 4,
"code": "2739"
},
{
"orderid": "12696",
"id": 2739,
"name": "Hellmanns 232 Ml",
"quantity": 4,
"code": "2739"
},
{
"orderid": "12696",
"id": 2739,
"name": "Hellmanns 232 Ml",
"quantity": 4,
"code": ""
},
{
"orderid": "12696",
"id": 2739,
"name": "Hellmanns 232 Ml",
"quantity": 4,
"code": ""
}
]
我希望得到总数,同一产品中有多少商品被挑选了,哪些没有
这是我需要的一个例子:
[
{
"orderid": "12696",
"id": 3929,
"name": "Eucaliptus 90 Gr",
"quantity": 3,
"picked": 2,
"notPicked": 1
},
{
"orderid": "12696",
"id": 2739,
"name": "Hellmanns 232 Ml",
"quantity": 4,
"picked": 2,
"notPicked": 2
}
]
提前谢谢
这是我的代码:
// Here i grab all the code inputs, even empty ones
const totalItemsPickedArr = req.body.code;
//I convert that array of codes into an array of objects
let newTotalItemsArr = totalItemsPickedArr.map(code => {
return ({
code
})
})
// I bring all the items from the order via sequelize
db.Detallepedido.findAll({
where: {
pedido_id: orderid
},
include: [{ all: true, nested: true }],
order: [['productoorden', 'orden', 'ASC']]
})
.then(products => {
// Here i map the promise and make a new array of objects with the data i need.
let productListArr = products.map(product => {
return ({
orderid: orderid,
id: product.producto_id,
name: product.producto_nombre,
price: product.precio,
quantity: product.cantidad,
order: product.productoorden.orden,
category:
product.productoorden.categoriaproducto[0].categoria_id,
})
})
// Flattened makes each object multiply by its quantity, so it returns a bigger array, like the one i showed in the first array.
const flattened = productListArr.reduce((acc, item) => {
return [
...acc,
...Array.from({ length: item.quantity }, () => ({...item}))
]
}, [])
//then i make a new array with the flattened array and I paste the code the user input.
let newProductListArr = flattened.map((product, index) => {
return ({
...product,
...newTotalItemsArr[index]})
})
在我展平数组后,我只需要为每个产品显示一个对象,并根据输入的代码添加拾取/未拾取的总数
抱歉,如果太复杂了,我知道这不是最好的代码。谢谢 我将根据您发布的数组和预期的数组结果添加此方法 我没有详细介绍整个代码,只是想指出如何执行转换
let scans=[{…}]//所有项目
让组=扫描。减少((acc,cur)=>{
设{id,code}=cur
设{picked,notPicked}=acc[id]|{picked:0,notPicked:0}
//执行操作以对修改的变量进行计数
如果(代码=='')
未经挑选++
其他的
精选++
acc[id]={…cur,picked,notPicked}
返回acc
}, {})
let converted=对象值(组)
到目前为止您尝试了什么?@limido我尝试了reduce,但我不知道如何根据属性“code”是否为空来获取总数。请将您的代码添加到问题中,以便我们可以指导you@limido我用英语编辑并添加了代码,我不知道如何操作以获得总数。谢谢你的回复!更新了答案,为计数器变量添加了一些逻辑