如何使用JS中的循环修改数组中的对象


module.exports.checkoutMany = async (data) => { let tempTotalAmount = 0
data.orderDetail.forEach(async e => { 
let price = await Product.findById(e.productId).then(product => {
console.log(`product price from forEach: ${product.price}`)
return product.price
})
console.log(`price * quantity: ${price} * ${e.quantity}`)

tempTotalAmount += price * e.quantity 
console.log(`tempTotalAmount: ${tempTotalAmount}`)
})  
// let newOrderDetail = data.orderDetail.map(async obj => {
//  if(obj.keys === price) {
//      return obj.price = 1
//  } else {
//      return obj
//  }
// })
// for(i = 0; i < data.orderDetail.length; i++) {
//  if(data.orderDetail[i].price) (
//      )
// }
console.log('newOrderDetail')
console.log(newOrderDetail)
let newOrder =  await new Order ({  
userId: data.userId,
orderDetail: data.orderDetail,
totalAmount: tempTotalAmount
})
return newOrder.save().then((order, error) => {
if(error) {
return false
} else {
return order
}
})
}

我试图获取对象属性名称并分配新值,但没有成功。

我的目标是通过从产品模型中获取价格属性来实现价格属性的自动化。

到目前为止,它是在Postman的req.body中手动定义的。

谢谢。

我认为您可以使用Array.map((来实现这一点,就像您第一次尝试注释掉一样

let arr = [
{id: 1, name: "Michael"},
{id: 2, name: "Joe"},
]
const newArr = arr.map(obj => {
if (obj.id === 1) {
return {...obj, name: "John"};
} else {
return obj;
}
});
console.log(newArr);

按照现在的方式,当obj.price=1时,您覆盖的是对象,而不是修改对象。可以使用排列运算符用上一个对象的所有特性填充新对象,然后覆盖所需的特性。

你也在错误的地方使用等待。map函数和创建newOrder不是异步任务

相关内容

  • 没有找到相关文章

最新更新