我正在尝试使用以下代码在quoteValue
数组的元素(在这种情况下为对象)中添加users
键值。
当我打印出console.log(users[0])
时,它没有显示quoteValue
的users[0]
值。但是,console.log(users[0].quoteValue)
打印出quoteValue
的实际值。
我不知道怎么可能。非常感谢您的帮助!
export async function get_client_users(req, res) {
try {
let users = await User.find({ role: { $eq: 'client' }, status: { $ne: 'deleted' } }, { name: 1, mobile: 1, email: 1, status: 1, ref_id : 1, _id: 1 });
for(let i = 0; i < users.length; i += 1) {
let quotes = await Quote.find({client: users[i]._id});
const totalQuote = quotes.length;
let cost = 0;
for(let i = 0; i < quotes.length; i += 1) {
cost += quotes[i].total_cost;
}
const result = {
totalQuote: totalQuote,
quoteValue: cost
}
Object.assign(users[i], result);
}
return res.status(200).json(users);
} catch(e) {
console.log(e);
return res.status(400).json({ message: 'Technical Error. Please try again later.' });
};
};
如果可以创建新的https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment对象(在下面的代码中称为users
,则我建议使用析构(updatedUsers
):
export async function get_client_users(req, res) {
try {
let users = await User.find({ role: { $eq: 'client' }, status: { $ne: 'deleted' } }, { name: 1, mobile: 1, email: 1, status: 1, ref_id : 1, _id: 1 });
let updatedUsers = [];
for(let i = 0; i < users.length; i++) {
let quotes = await Quote.find({client: users[i]._id});
let quoteValue = 0;
for(let i = 0; i < quotes.length; i++) {
quoteValue += quotes[i].total_cost;
}
updatedUser = {
...users[i],
totalQuote: quotes.length,
quoteValue
}
updatedUsers.push(updatedUser);
}
return res.status(200).json(updatedUsers);
} catch(e) {
console.log(e);
return res.status(500).json({ message: 'An error occurred. Please try again later.' });
};
};
[我还做了一些更改,例如发生错误时发送500
而不是400
,通过直接将totalQuote
分配给quotes.length
删除了updatedUser.totalQuote
变量的分配,还使用了i++
代替i += 1
循环中的for
。我建议使用诸如ESLint(https://eslint.org/)或Prettier(https://prettier.io/)之类的linter,以提高代码的可读性。
[另外,我建议使用map
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)遍历您的users
对象,并使用reduce
(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)从您的quoteValue
属性中获取total_cost
的值quotes
,但这不在您的问题范围内。