Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 统一数组中的对象,获取总数_Javascript_Node.js_Sequelize.js - Fatal编程技术网

Javascript 统一数组中的对象,获取总数

Javascript 统一数组中的对象,获取总数,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我正在努力解决这个问题 我正在开发一个带有条形码扫描仪的拣选应用程序。我有一个多步骤的表格,一次显示一个产品。用户可以选择项目并转到下一个项目,也可以跳过它,因为没有库存。 我现在有了这个对象数组,是在表单提交后获得的。它显示用户输入的代码,并使用产品的id(我创建了id)对其进行验证。如果代码“”为空,则是因为用户跳过了它 [ { "orderid": "12696", "id": 3929, "

我正在努力解决这个问题

我正在开发一个带有条形码扫描仪的拣选应用程序。我有一个多步骤的表格,一次显示一个产品。用户可以选择项目并转到下一个项目,也可以跳过它,因为没有库存。 我现在有了这个对象数组,是在表单提交后获得的。它显示用户输入的代码,并使用产品的id(我创建了id)对其进行验证。如果代码“”为空,则是因为用户跳过了它

[
  {
    "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我用英语编辑并添加了代码,我不知道如何操作以获得总数。谢谢你的回复!更新了答案,为计数器变量添加了一些逻辑