Сравните два объекта массива, используя angular - PullRequest
0 голосов
/ 28 марта 2020

В моем проекте я хочу сравнить два объекта (изображения) массива, и если значение объекта одинаково, он должен удалить объект (изображения) и очистить предыдущий. но в моем коде, если я удаляю объект, все предыдущие объекты очищаются. Я просто хочу очистить только один и тот же объект.

примечание: мне нужно реализовать это для captcha

file.ts:

origin = [{    
    img: 'https://www.gstatic.com/webp/gallery3/1.png'
  },
  {    
      img: 'https://www.gstatic.com/webp/gallery3/2.png'
  },
  {   
      img: 'https://www.gstatic.com/webp/gallery3/3.png'
  }];
  //---------------
  samp = [{  
    img: 'https://www.gstatic.com/webp/gallery3/1.png'
  },
  { 
    img: 'https://www.gstatic.com/webp/gallery3/2.png'
  },
  {  
    img: 'https://www.gstatic.com/webp/gallery3/3.png'
  }];
  //---------------
  destination = [
  ];
  //--------------- 
  drop(event: CdkDragDrop<string[]>) {
    if (event.previousContainer === event.container) {
      moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
    } else {
      let item:any = event.previousContainer.data[event.previousIndex];
      let copy:any = JSON.parse(JSON.stringify(item));
      let element:any = {};
      for(let attr in copy){
        if(attr == 'title'){
          element[attr] = copy[attr] += ' copy';
        }else{
          element[attr] = copy[attr];
        }
      }
      //compare and drag
      for (var i = 0, len = this.origin.length; i < len; i++) { 
        for (var j = 0, len2 = this.samp.length; j < len2; j++) { 
            if (this.origin[i].img === this.samp[j].img) {
             this.samp.splice(j,1);
             len2=this.samp.length;               
                this.destination=[element];
            }
        }
      }
    }
  }

file. html:

image

output :

enter image description here

Ответы [ 3 ]

1 голос
/ 28 марта 2020

Вы не можете сравнивать два объекта в Angular напрямую. Angular использует Superset из Javascript, т.е. TypeScript.

Один из подходов, который я могу придумать, - это stringify их и сравнение (т.е. простое преобразование в json).

var stringifiedObject = JSON.stringify(sourceObject); // this code wrapped with json.parse can also be used to perform deep clone in JS

Как только у вас есть эти два объекта stringyfied, которые нуждаются для сравнения можно выполнить сравнение с оператором ===.

0 голосов
/ 29 марта 2020

вы можете проверить используя

     if(JSON.stringify(origin) === JSON.stringify(samp)) {
         // object are same
       } else {
         // object are different
       }
0 голосов
/ 28 марта 2020

Вы можете использовать этот пример

import * as deepEqual from "deep-equal";

console.log(deepEqual({a:123},{a:123}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...