比较一个对象属于另一个对象

时间:2019-03-12 12:34:58

标签: javascript object ecmascript-6

我下面有两个对象。

如您所见,我如何检查 objectB 是否属于 objectA ,因为这两个对象的所有字段都相同,并且 objectB 的字段 objectA casts字段的子级。

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' },

2 个答案:

答案 0 :(得分:1)

函数isObjectBelong接收两个参数:

  • rootObject-包含cats字符串数组属性的对象
  • childObject-包含cats字符串数组属性的对象

如果true包含childObject.cats的子集,则函数返回rootObject.cats,否则返回false

const isObjectBelong = (rootObject, childObject) =>
    childObject.casts.every(r => rootObject.casts.includes(r));

答案 1 :(得分:1)

对于您的特定用例,应执行以下操作。

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将检查父级中是否存在子级中的所有演员。添加更多内容后,检查代码失败的可能性就较小。