提问人:swftowu69 提问时间:10/17/2022 更新时间:10/17/2022 访问量:963
Typescript 如何使用 for 循环遍历对象
Typescript how to iterate with for loop over object
问:
我正在编写一个 Typescript nodejs 应用程序,我想在其中迭代传入的 sql 响应,但我不知道如何修复语法错误。
const getTicketPriceBrutto = async (eventID: number): Promise<number> => {
const rows: [] = await query(
`SELECT ticketPriceCentBrutto FROM events
WHERE eventID = '${eventID.toString()}';`
);
let price: number;
//syntax error...
// return rows.forEach((element: any) => {
// price = element.ticketPriceCentBrutto;
// return price;
// });
//here is also an syntax error
for (const iterator of rows) {
price = iterator.ticketPriceCentBrutto;
}
return price;
};
如何解决这个问题?
答:
1赞
JSEvgeny
10/17/2022
#1
您希望得到的最终结果是什么?一系列价格?如果是,则使用 map:
const prices = rows.map((item: any) => item.ticketPriceCentBrutto)
此外,你的类型在语法上是不正确的,它必须是一个数组,如果你不知道返回对象的确切形状,那么使用而不是只是,这也可能是语法无效的原因rows
any[]
[]
1赞
Haritha Senevirathne
10/17/2022
#2
在注释区域中,您曾经用于迭代数组。但 forEach 不返回任何内容。以下是使用 forEach 的正确方法。forEach
rows
const getTicketPriceBrutto = async (eventID: number): Promise<number[]> => {
const rows: [] = await query(
`SELECT ticketPriceCentBrutto FROM events
WHERE eventID = '${eventID.toString()}';`
);
const priceList: number[] = [];
for (const row of rows) {
price.push(row.ticketPriceCentBrutto);
}
return priceList;
};
另一种选择是使用 javascript 提供的功能。map
const getTicketPriceBrutto = async (eventID: number): Promise<number[]> => {
const rows: [] = await query(
`SELECT ticketPriceCentBrutto FROM events
WHERE eventID = '${eventID.toString()}';`
);
return rows.map(row => row.ticketPriceCentBrutto);
};
这两种方式都可以从函数返回价格数组getTicketPriceBrutto
1赞
tokland
10/17/2022
#3
像这样的东西?
type Row = { ticketPriceCentBrutto: number };
const getTicketPriceBrutto = async (eventID: number): Promise<number | undefined> => {
const rows: Row[] = await query(
`SELECT ticketPriceCentBrutto FROM events
WHERE eventID = '${eventID}';`
);
return rows[0]?.ticketPriceCentBrutto;
};
上一个:查找数组中的第一个正数
评论