网站搜索

javascript - 被 3 层嵌套数组弄糊涂了


我正在处理从保存在 SharePoint 文档库中的 Excel 文件中提取数据。我正在获取行,但对数据结构感到困惑。我对 TypeScript/JavaScript 还比较新。

我正在获取这些行:

private _getRows(documentLibraryID: string, documentID: string, worksheet: string, table: string): Promise<[MicrosoftGraph.WorkbookTableRow]> {
  return new Promise<any>((resolve, reject) => {
    this.props.context.msGraphClientFactory
    .getClient()
      .then((client: MSGraphClient): void => {
        client
          .api(`/sites/${URL}/drives/${documentLibraryID}/items/${documentID}/workbook/worksheets('${worksheet}')/Tables('${table}')/rows`)
          .get((error, response: any, rawResponse?: any) => {
            if (response) {
              let rows:[MicrosoftGraph.WorkbookTableRow] = response.value;

              resolve(rows);
            }
            else {
              reject(error);
            }
          });
        });
  });
}

我得到的结果:

我尝试枚举数组:

  for (let row of rows) {
    console.log("row: ", row);
    for (let value of row.values) {
      console.log("value: ", value);
      for (let newValue of value.values) {
        console.log("newValue: ", newValue);

      }
    }
  }

但是我无法访问 newValue 对象:

我对这个结构哪里不理解?它看起来像三个嵌套的数组。

答案#1

问题是,当你达到这一点时:for (let value of row.values),value 确实是一个数组。所以不需要做 value.values。

这段代码应该可以正常工作:

for (let row of rows) {
    console.log("row: ", row);
    for (let valueArr of row.values) {
      console.log("value: ", valueArr);
      for (let newValue of valueArr) {
        console.log("newValue: ", newValue);

      }
    }
  }

希望这能帮到你!