Typescript 如何使用 for 循环遍历对象

Typescript how to iterate with for loop over object

提问人:swftowu69 提问时间:10/17/2022 更新时间:10/17/2022 访问量:963

问:

我正在编写一个 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;
};

如何解决这个问题?

数组 TypeScript for-of-loop

评论

0赞 tokland 10/17/2022
你想要总和吗?或者查询是否应该返回一行,而您需要该值?
0赞 swftowu69 10/17/2022
仅返回单个值。我只是使用这里的答案,并将数组中的 0 条目返回 this。

答:

1赞 JSEvgeny 10/17/2022 #1

您希望得到的最终结果是什么?一系列价格?如果是,则使用 map:

const prices = rows.map((item: any) => item.ticketPriceCentBrutto)

此外,你的类型在语法上是不正确的,它必须是一个数组,如果你不知道返回对象的确切形状,那么使用而不是只是,这也可能是语法无效的原因rowsany[][]

1赞 Haritha Senevirathne 10/17/2022 #2

在注释区域中,您曾经用于迭代数组。但 forEach 不返回任何内容。以下是使用 forEach 的正确方法。forEachrows

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;
};