我有两个对象。
如您所见,如何检查 Objectb 属于 Objecta >是否因为两个对象的所有字段都是相同的,并且 casts objectb 的field 是 casts field 的孩子 objecta 。
。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' },
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)
对于您的特定用例
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))
我添加了一点检查和一个称为ISProper的其他参数。Isproper会检查孩子中所有的演员是否存在于父母中。添加更多检查时,您的代码不太可能失败。
函数isObjectBelong
接收两个参数:
-
rootObject
-包含cats
字符串数组属性的对象 -
childObject
-包含cats
字符串阵列属性的对象
函数返回true
如果childObject.cats
包含rootObject.cats
的子集,否则false
否则。
const isObjectBelong = (rootObject, childObject) =>
childObject.casts.every(r => rootObject.casts.includes(r));