J'ai deux objets ci-dessous.
Comme vous le voyez, comment puis-je vérifier la
3 Réponses :
La fonction Converses de fonction isObjectbelong code> reçoit deux arguments:
rootObject code> - objet contenant
CATS code> Propriété de la chaîne de la chaîne li>
ChildObject CODE> - Objet contenant
CATS CODE> Propriété Array de chaîne LI>
ul>
true code> Si
ChildObject.cats code> contient sous-ensemble de
rootObject.cats code> et
false code > sinon. 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', '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)
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))
@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' code> ferait le test faux