NodeJS – 检查JSON是否包含子JSON

我有两个JSON对象,我想检查其中一个包含另一个(Object1包含Object2)

两个JSON对象都是dynamic的 – 我不知道任何对象的结构或属性名称。

例如,Object1可以像这样:

{ "propertyA": "value1", "propertyB": "value2", "propertyC": { "objProp1": "objVal1", "objProp2": "objVal2" } "propertyD": [ { "arrProp1": "arrVal1", "arrProp2": "arrVal2" }, { "arrProp1": "arrVal3", "arrProp2": "arrVal4", } ] } 

虽然Object2可能是下列之一:

选项1:

 { "propertyA": "value1", "propertyD": [ { "arrProp2": "arrVal4" } ] } 

选项2:

 { "objProp1": "objVal1" } 

我希望这个代码有一些用处。 我没有太多的时间来检查所有边界情况或降低复杂性。

我不确定你心中有什么逻辑,所以我为以下条件编写代码。

  1. 如果你想深入检查object1是否包含object2(object1中的所有键和值都可以在object1中find),那么这段代码可以帮助你。
 function _contains(obj1, obj2) { const obj2keys = Object.keys(obj2); for (let i = 0; i < obj2keys.length; i++) { const key = obj2keys[i]; if (obj1.hasOwnProperty(key)) { if (typeof (obj1[key]) === typeof (obj2[key])) { if (typeof (obj1[key]) === 'object') { if (Object.keys(obj1[key]).length !== Object.keys(obj2[key]).length) return false; const res = _contains(obj1[key], obj2[key]) if (!res) return false; } else { if (obj1[key] !== obj2[key]) return false; } } else { return false; } } else return false; } return true; } function contains(object1, object2) { let res = false; res = _contains(object1, object2); const keys = Object.keys(object1); for (let index = 0; index < keys.length; index++) { const key = keys[index]; if (res) return res; else if (typeof (object1[key]) === 'object') { res = contains(object1[key], object2); } } return res; } const object1 = { "propertyA": "value1", "propertyB": "value2", "propertyC": { "objProp1": "objVal1", "objProp2": "objVal2" }, "propertyD": [{ "arrProp1": "arrVal1", "arrProp2": "arrVal2" }, { "arrProp1": "arrVal3", "arrProp2": "arrVal4", } ] } const object2 = { "propertyA": "value1", "propertyD": [ { "arrProp2": "arrVal4" } ] } console.log(contains(object1, object2));