>

이번에 다음과 같은 문제가 발생하면 데이터베이스에서 몇 분마다 업데이트되는 객체 배열을 가져옵니다. 문제는이 배열에 이전 객체와 비교하여 새 객체 또는 삭제 된 객체가있을 수 있다는 것입니다. 예;

첫번째 데이터 입력

[
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Lisa', color: 'rose', age: '4'}
]

두 번째 데이터 입력 (객체가 추가됨)

[
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Lisa', color: 'rose', age: '4'},
  {name: 'Adam', color: 'green', age: '11'}
]

세번째 데이터 입력 (객체가 삭제됨)

[
  {name: 'Paul', color: 'blue', age: '7'},
  {name: 'Adam', color: 'green', age: '11'}
]

첫 번째 항목에 비해 추가 또는 삭제 된 요소를 감지하고 확인해야합니다. forEach 를 시도하십시오.  키를 통해 수행 할 수 있지만 개체의 순서가 다르기 때문에 사용할 수 없습니다.

이러한 차이점을 어떻게 알 수 있습니까?

  • 답변 # 1

    전투 후 최적의 솔루션을 찾으려고 노력한 후 다음을 수행했습니다 ....

    필요한 것, 잘 작동합니다. JS에서는 매우 기본적입니다. 나쁜 습관을 범하지 않기를 바랍니다. 필요한 사람과 공유합니다.

    나중에.겠습니다.

    let before = [
      {name: 'Paul', color: 'blue', age: '7'},
      {name: 'Lisa', color: 'rose', age: '4'}
    ]
    // second data entry ( an object is added )
     let after = [
      {name: 'Paul', color: 'blue', age: '7'},
      {name: 'Lisa', color: 'rose', age: '4'},
      {name: 'Adam', color: 'green', age: '11'}
    ]
    // third data entry ( an object is deleted )
    let afterD = [
      {name: 'Paul', color: 'blue', age: '7'},
      {name: 'Adam', color: 'green', age: '11'}
    ]
    // new element
    let newElement = after.filter(element => {
      return !before.some(e => element.name === e.name);
    });
    // delete element
    let deleteElement = before.filter(element => {
      return !afterD.some(e => element.name === e.name);
    });
    console.log('new element: ')
    console.log(newElement)
    console.log('delete element: ')
    console.log(deleteElement)
    
    

  • 답변 # 2

    먼저 새로운 배열 길이가 오래된 것보다 큰 경우 길이를 확인해야합니다. 새로운 배열을 반복해야합니다. 그렇지 않으면 오래된 배열을 반복해야합니다. 두 배열과의 차이

    var oldVal = [
          {name: 'Paul', color: 'blue', age: '7'},
          {name: 'Lisa', color: 'rose', age: '4'}
        ];
        var newVal = [
          {name: 'Paul', color: 'blue', age: '7'},
          {name: 'Lisa', color: 'rose', age: '4'},
          {name: 'Adam', color: 'green', age: '11'},
          {name : 'xxx'}
        ];
        var t1=[];
        var t2=[];
        if(newVal.length >= oldVal.length){
          t1=newVal;
          t2=oldVal;
        }  
        else{
          t1=oldVal;
          t2=newVal;
        }
    
        var dif=[];
        t1.forEach(i => {
          var res = t2.findIndex(x => JSON.stringify(x) == JSON.stringify(i));
          console.log(res);
          if(res == -1 ){
            dif.push(i);
          }
        })
        console.log(dif);
    
    

    결과는 다음과 같습니다;

    0: {name: "Adam", color: "green", age: "11"}
    1: {name: "xxx"}
    
    

  • 이전 html - div 요소 안에 헤더와 스크롤 섹션을 갖는 방법
  • 다음 laravel - 컬렉션 키를 합산하려고하는데 그것을 알아낼 수없는 것 같습니다