gpt4 book ai didi

javascript - NodeJS - 检查 JSON 是否包含子 JSON

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:27 24 4
gpt4 key购买 nike

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

这两个 JSON 对象都是动态的 - 我不知道这两个对象的结构或属性名称。

例如,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(object2 中的所有键和值都可以在 object1 中找到),那么此代码可能会对您有所帮助。

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));

  • 如果您只需要检查 key ,那么下面的代码应该足够了。
  • function containsKeys(object1,object2){
    let contains =true;
    const object1Keys = Object.keys(object1);
    const object2Keys = Object.keys(object2);

    for (let index = 0; index < object2Keys.length; index++) {
    const key = object2Keys[index];
    if(!object1.hasOwnProperty(key)){
    contains = false;
    }
    }
    return contains;
    }

    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(containsKeys(object1, object2));

    关于javascript - NodeJS - 检查 JSON 是否包含子 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47332108/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com