0
votes

Comparer qu'un objet appartient à un autre objet

J'ai deux objets ci-dessous.

Comme vous le voyez, comment puis-je vérifier la objetb appartient à l'objet objet (fort> ou non parce que tous les champs des deux objets sont Le même, et le champ casse de la objetb est un enfant du champ CASTS de l'objet . < / p> xxx


5 commentaires

@mplungjan merci pour votre mot clé. Je ferai des recherches.


développeur.mozilla.org/en-us/ Docs / Web / JavaScript / Référence / ...


Je pense qu'un comparateur profond des objets aiderait ... Mais puisque les données ne sont pas exactes, vous devrez écrire des conditions spéciales


Bonjour @nguyenhoang, veuillez vérifier ce npm.runkit.com/is-subset . J'espère que cela vous aidera.


J'ai mis en place un test pour vos objets: jsfiddle.net/mplungjan/6aqhcrp8 - Veuillez noter que le premier espace dans 'christoph waltz' ferait le test faux


3 Réponses :


1
votes

La fonction isObjectbelong reçoit deux arguments:

  • rootObject - objet contenant CATS Propriété de la chaîne de la chaîne
  • ChildObject - Objet contenant CATS Propriété Array de chaîne

    Converses de fonction true Si ChildObject.cats contient sous-ensemble de rootObject.cats et false sinon. xxx


0 commentaires

1
votes

ObjectA = {
  title: 'Alita: Battle Angel',
  year: '2019',
  casts: ['Rosa Salazar',
    'Christoph Waltz',
    'Jennifer Connelly',
    'Mahershala Ali',
    'Michelle Rodriguez',
    'Casper Van Dien'
  ]
}

ObjectB = {
  title: 'Alita: Battle Angel',
  casts: ['Rosa Salazar',
    'Christoph Waltz'
  ],
  year: '2019'
}
ObjectC = {
  title: 'Alita: Battle Angel',
  casts: ['Rosa Salazar',
    'Christoph'
  ],
  year: '2019'
}
ObjectD = {
  title: 'Alita: Battle',
  casts: ['Rosa Salazar',
    'Christoph Waltz'
  ],
  year: '2019'
}
ObjectE = {
  title: 'Alita: Battle Angel',
  casts: ['Rosa Salazar',
    'Christoph Waltz'
  ],
  year: '2018'
}

function compare(obj1, obj2) {

  if (obj1.title == obj2.title && obj1.year == obj2.year) {
    for (i = 0; i < obj2.casts.length; i++) {

      if (obj1.casts.indexOf(obj2.casts[i]) == -1) {
        console.log('obj2 is not a part of obj 1');
        return;
      }
    }
    console.log('obj2 is a part of obj 1');
  } else {
    console.log('obj2 is not a part of obj 1');
  }
}
compare(ObjectA, ObjectB)
compare(ObjectA, ObjectC)
compare(ObjectA, ObjectD)
compare(ObjectA, ObjectE)


0 commentaires

1
votes

Pour votre cas d'utilisation spécifique, quelque chose comme ce qui suit devrait fonctionner.

p>

ObjectA = {
  title: 'Alita: Battle Angel',
  year: '2019',
  casts: ['Rosa Salazar',
    'Christoph Waltz',
    'Jennifer Connelly',
    'Mahershala Ali',
    'Michelle Rodriguez',
    'Casper Van Dien'
  ]
}

ObjectB = {
  title: 'Alita: Battle Angel',
  casts: ['Rosa Salazar',
    'Christoph Waltz'
  ],
  year: '2019'
}

ObjectC = {
  title: 'Alita: Battle Angel',
  casts: ['Rosa Salazar',
    'Someone else'
  ],
  year: '2019'
}

const isSubset = (parentObject, childObject, isProper) => {
  if ((parentObject.title === childObject.title) && (parentObject.year === childObject.year)) {
    const casts = childObject.casts.filter(cast => parentObject.casts.find(originalCast => originalCast === cast))
    return isProper ? (casts.length === childObject.casts.length) : Boolean(casts.length)
  }
  return false
}

console.log(isSubset(ObjectA, ObjectB))
console.log(isSubset(ObjectA, ObjectC))
console.log(isSubset(ObjectA, ObjectB, true))
console.log(isSubset(ObjectA, ObjectC, true))


0 commentaires