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