首页 > 解决方案 > Angular Typescript 将对象推入数组,理解错误

问题描述

所以我试图在我的应用程序中创建一个带有 windows.localstorage 的对象数组。

export class MyListComponent implements OnInit {

  public myStorage = window.localStorage;
  public list : any [] = [];
  public empty = true;

  constructor() { }

  ngOnInit(): void {

    for(var k in window.localStorage) {
      var temp = this.myStorage[k].split(",");
      console.log(temp);
      if(temp.length == 4) {
        let item = {
          id: k,
          type: temp[1]
        }
        this.empty = false;
        this.list.push(item);
        console.log(item);
      }
    }
    console.log(this.list);
  }

}

出于某种原因,最后一行 console.log(this.list) 似乎没有工作,或者换句话说,没有添加任何内容。我不确定为什么会这样,因为所有其他控制台日志似乎都在工作,例如 console.log(temp) 和 console.log(item)。我的控制台还显示以下错误:

错误类型错误:this.myStorage[k].split 不是 MyListComponent.ngOnInit 的函数

这是为什么?如果它没有成功拆分,则不会创建 temp。如何将我的项目对象添加到我的列表数组中,为什么 this.myStorage.split 会出现类型错误?

标签: javascriptarraysangulartypescript

解决方案


您可以尝试如下。此外,不建议对 localStorage 等此类实例使用 for...in 循环,因为它迭代所有可枚举属性而不仅仅是自己的属性。

Object.keys(window.localStorage).forEach(k => {
    const value = window.localStorage[k];
    if (value) {
        var temp = value.split(",");
        console.log(temp);
        if (temp.length == 4) {
            let item = {
                id: k,
                type: temp[1]
            }
            this.empty = false;
            this.list.push(item);
            console.log(item);
        }
    }
});

推荐阅读