javascript - 如何将 map 插入数组并清除原始 map 以存储更多数据

标签 javascript typescript protractor

我正在使用一张 map 将姓名和号码存储为 K,V 对。我正在使用 for 循环来运行并存储此 map 中的多个数据集。预期的行为是一个将被执行的循环,值将存储在映射中,然后我想将此映射插入一个数组并清除原始映射以存储另一个数据集。我的问题是,当我尝试清除原始 map 时,它也会删除已保存在数组中的数据。 我尝试使用深层复制,但它不起作用。还有其他方法吗?

下面是我的代码。

for (let GUId of GUIIds) {
          if (GUId.toLowerCase() != parentGUI.toLowerCase()) {
            await browser.driver.switchTo().window(GUId);

            for (let j = 0; j < (await this.elePanels.count()); j++) {
              if (j != 0) await this.elePanels.get(j).click();

              let name = await this.elePanels
                .get(j)
                .getWebElement()
                .findElement(By.xpath(".//mat-panel-title"))
                .getText();

              let number = await this.elePanels
                .get(j)
                .getWebElement()
                .findElement(
                  By.xpath(
                    ".//span[@class='ng-star-inserted']//following-sibling::span"
                  )
                )
                .getText();
              await map.set(name, number);
            }
            await actualData.push(map);
            await map.clear();
            await browser.driver.close();
            await browser.driver.switchTo().window(parentGUI);
          } 

          return actualData; 

最佳答案

数组是 Javascript 中的引用类型,当将变量分配给它时,它指向数组的引用,而不是值。您收到此错误是因为 actualData 存储 map 数组的引用而不是值。 要解决此问题,请使用 array.slice(),因为 array.slice() 返回数组的值而不是引用。

    const actualData = [];
    ...
    actualData.push(map.slice(0))

您可以阅读更多相关信息here

关于javascript - 如何将 map 插入数组并清除原始 map 以存储更多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59573957/

相关文章:

generics - 获取泛型参数的类型

javascript - Protractor、Jasmine 和在第一次失败时停止测试

javascript - 从数据表传递多个数组值

javascript - 单击父类的另一个子级时,如何获得子级的值?

javascript - jQuery 更改 div 的类

Javascript 函数绑定(bind)问题

javascript - 如何将 null 插入指定数组

angular - 在 Angular 中过滤响应对象

angularjs - 当 xunit 文件不存在时,Protractor/Jasmine 不会为该文件创建文件夹

protractor - 防止 Protractor 在 promise 被解决之前完成