Ionic 2 - 如何将大型JSON数据放入变量并删除重复项而不会延迟?

时间:2018-05-17 21:49:56

标签: json ionic2

我有一个包含超过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的数据并尝试将数据放入变量并尝试删除重复项时,应用程序需要很长时间才能准备好。

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

编辑:

这是函数“removeDuplicates”的代码

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 个答案:

答案 0 :(得分:3)

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', ...]