Ionic 2 - Как поместить большие данные JSON в переменную и удалить дубликаты без задержки? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть файл JSON, который содержит более 40K (40000) строк.

Я использовал этот код, чтобы получить данные json и поместить полученные данные в переменную:

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

Моя проблема: когда данные JSON загружаются и пытаются поместить данные в переменную и пытаются удалить дубликаты, приложению требуется много времени для подготовки.

Так есть ли решения, которые ускоряют этот процесс или исправляют его?

EDIT:

Вот код функции "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 голосов
/ 23 мая 2018

Так, как найдено в , этот ответ и изменен для вашего случая:

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

Подробнее о 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', ...]

...