javascript - შეადარე ორი JSON და შექმენი JSON საერთო მნიშვნელობით


მინდა შევქმნა ორი JSON მასივი საერთო თვისების მნიშვნელობის საფუძველზე, ორი JSON-ის შედარებით.

this.linkedParticipants =[
  {
    "id": 3,
    "name": "Participant 2",
    "email": "[email "
  },
  {
    "id": 2,
    "name": "Participant 1",
    "email": "[email "
  },
  {
    "id": 1,
    "name": "Libin Varghese",
    "email": "[email "
  },
  {
    "id": 7,
    "name": "Participant 5",
    "email": "[email "
  }
]
this.appointmentList = [
  {
    "id": 32,
    "participant": {
      "id": 1,
      "name": "Libin Varghese",
      "email": "[email "
    }
  },
  {
    "id": 33,
    "participant": {
      "id": 7,
      "name": "Participant 5",
      "email": "[email "
    }
  }
]
this.invitedList = [];
this.confirmedList = [];
let temp = {}
this.linkedParticipants.forEach((participant, i) => {
  this.appointmentList.forEach((appointment, j) => {
    if (appointment.participant.name.indexOf(participant.name)) {
      temp = {
        'participant': participant
      }
      this.invitedList.push(temp);
    }
    else {
      this.confirmedList.push(appointment)
    }
  })
})

მაგრამ კოდი არ მუშაობს როგორც საჭიროა, რადგან this.invitedList ორი მნიშვნელობა იძლევა ორმაგ მნიშვნელობებს. მიმოხილვის პირობაში მგონი რაღაც პრობლემა მაქვს.

პასუხი #1

ამის მიღწევა შეგიძლიათ filter()-ის სხვადასხვა კომბინაციით:

 var linkedParticipants =[
  {
    "id": 3,
    "name": "Participant 2",
    "email": "[email "
  },
  {
    "id": 2,
    "name": "Participant 1",
    "email": "[email "
  },
  {
    "id": 1,
    "name": "Libin Varghese",
    "email": "[email "
  },
  {
    "id": 7,
    "name": "Participant 5",
    "email": "[email "
  }
];
var appointmentList = [
  {
    "id": 32,
    "participant": {
      "id": 1,
      "name": "Libin Varghese",
      "email": "[email "
    }
  },
  {
    "id": 33,
    "participant": {
      "id": 7,
      "name": "Participant 5",
      "email": "[email "
    }
  }
];


var confirmedList = appointmentList.filter((a) => {
  return linkedParticipants.find((p) => p.id === a.participant.id);
});

var invitedList = linkedParticipants.filter((p) => {
  return !appointmentList.find((a) => p.id === a.participant.id);
});

console.log(confirmedList)
console.log(invitedList)

პასუხი #2

შესაძლებელია გამოყენებით ფილტრისა და შედარების ფუნქციის.

 var linkedParticipants =[
      {
        "id": 3,
        "name": "Participant 2",
        "email": "[email "
      },
      {
        "id": 2,
        "name": "Participant 1",
        "email": "[email "
      },
      {
        "id": 1,
        "name": "Libin Varghese",
        "email": "[email "
      },
      {
        "id": 7,
        "name": "Participant 5",
        "email": "[email "
      }
    ]
    var appointmentList = [
      {
        "id": 32,
        "participant": {
          "id": 1,
          "name": "Libin Varghese",
          "email": "[email "
        }
      },
      {
        "id": 33,
        "participant": {
          "id": 7,
          "name": "Participant 5",
          "email": "[email "
        }
      }
    ]


    function comparer(otherArray){
        return function (current) {
            return otherArray.filter(function(other) {
                return other.id === current.id
            }).length===0;
        }
    }

   

   var invitedList = appointmentList.map(i=> {return i.participant});


    var confirmedList=linkedParticipants.filter(comparer(invitedList ));
    
    console.log(invitedList);
    console.log(confirmedList)