Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular Typescript将对象推入数组,以了解错误_Javascript_Arrays_Angular_Typescript - Fatal编程技术网

Javascript Angular Typescript将对象推入数组,以了解错误

Javascript Angular Typescript将对象推入数组,以了解错误,javascript,arrays,angular,typescript,Javascript,Arrays,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

因此,我尝试在我的应用程序中使用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.ngonit上的函数


为什么呢?如果它没有成功拆分,那么就不会创建temp。如何将我的项对象添加到列表数组中,以及为什么此.myStorage.split出现typeerror?

您不能对“window.localStorage”(存储{editorLastConnected:“1617595775”,editorHasEmittedBundle:“true”)中的变量使用“split”函数

在第一次for循环迭代中,temp变量将保留“editorLastConnected”的值,该值没有“,”且“split”函数不能使用

在for循环迭代的第二次迭代中。您的临时变量将选择没有“”的“editorHasEmittedBundle”的值,并且不能使用“split”函数


因此将抛出错误。

您可以像下面这样尝试。此外,不建议对此类实例(如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);
        }
    }
});

谢谢,成功了。我还不熟悉angular和所有这些,所以我很困惑为什么我的代码不能工作。老实说,我仍然有点不明白为什么这样做,为什么我的不这样做,但我想这可能就是语法的设计方式。您直接调用split(),而没有选中“this.myStorage[k].split(“,”;”),这就不同了。一旦it中断(引发异常),该线程的执行将自行停止,除非您使用try…catch()处理该异常。localStorage可能只有键而没有值。此外,localStorage有一个继承的属性“length”,它返回数字,用于循环中的…而无需像这样直接使用字符串检查。myStorage[k]。拆分(“,”)将中断代码。我相信你的情况就是这样。