代码之家  ›  专栏  ›  技术社区  ›  Ali Abdulaal

Ionic 2——如何在变量中放入大量JSON数据,并在没有延迟的情况下删除重复的数据?

  •  0
  • Ali Abdulaal  · 技术社区  · 6 年前

    我有一个包含超过40K(40000)行的JSON文件。

    我使用这段代码获取json的数据,并将接收到的数据放入变量:

    this.http.get(url).map(res => res.json()).subscribe(data => {
        ...
        this.users=data.users;
        ...
        this.images=data.images;
        this.removeDupicates();
        ...
    });
    

    我的问题是:当加载JSON的数据并尝试将数据放入变量并尝试删除重复项时,应用程序需要很长时间才能准备就绪。

    那么,有没有什么解决方案可以加快这个过程或修复它?

    编辑:

    下面是函数“RemovedDuplicates”的代码

    removeDupicates(){
       for(let i=0; i<this.images.length; i++){
          for(let j=0; j<this.images.length; j++){
             if(this.images[i].img == this.images[j].img && i!=j){
                this.images.splice(i,1);
             }
          }
       }
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Ivar Reukers    6 年前

    正如在 this answer 并根据您的情况进行了修改:

    Array.from(new Set(
    [
      {"img":"1"},
      {"img":"2"},
      {"img":"1"},
      {"img":"3"}
    ].map((itemInArray) => itemInArray.img)));
    

    More about Array.from & Set

    输出将是 ["1,"2","3"]

    现在,如果您希望这种情况异步发生,因此不必等待数据加载后再继续使用应用程序,您可以将其包装在 setTimeout

    所以:

    removeDuplicates() {
       setTimeout(() => {
         this.images = Array.from(new Set(
              this.images.map(image => image.img)
         ));
       }, 0); // execute timeout function immediately, fakes async
    }
    

    请注意,您不会有如下列表: [{img: 'myimage'}, ....] 但你现在有了一个清单 ['myimage', 'mysecondimage', ...]