比较一个对象属于其他对象



我有两个对象。

如您所见,如何检查 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));

最新更新