Javascript 将对象道具级别与可选道具进行比较

Javascript 将对象道具级别与可选道具进行比较,javascript,reactjs,Javascript,Reactjs,这是我要求指导的问题类型,因为我不确定我所寻找的是否存在 背景: 我正在使用Firestore来保存数据,我正在构建一个可重用的定制钩子React 16.8,以便在我想将数据保存到我的用户对象时使用。当我使用挂钩时,我会发送需要保存的道具,但所有道具都是可选的。我试图做的基本上是设置我的完整Firestore对象在客户端应该是什么样的结构,然后比较props参数以确保它遵循原始的约定 因为所有道具都是可选的,所以我只是尝试比较键的级别,而不是值的相等性。原始骨架的外观如下所示: firestor

这是我要求指导的问题类型,因为我不确定我所寻找的是否存在

背景: 我正在使用Firestore来保存数据,我正在构建一个可重用的定制钩子React 16.8,以便在我想将数据保存到我的用户对象时使用。当我使用挂钩时,我会发送需要保存的道具,但所有道具都是可选的。我试图做的基本上是设置我的完整Firestore对象在客户端应该是什么样的结构,然后比较props参数以确保它遵循原始的约定

因为所有道具都是可选的,所以我只是尝试比较键的级别,而不是值的相等性。原始骨架的外观如下所示:

firestore obj

{
    name,
    email,
    bio {
        summary,
        array,
        photo
    },
    something,
    more,
    much
}
然后,当我单击应用程序中的“保存”按钮时,我会向我的挂钩发送道具,这些道具可能看起来像这样,请注意不完整性:

{
    email: 'new@email.com',
    bio: {
        photo: 'url.com/new/photo'
    }
}
上述对象将通过测试。但如果我通过这样的道具:

{
    photo: 'url.com/new/photo'
}
我的比较会发现照片处于错误的级别,因为它应该是bio下的一个级别

所以我的问题是,是否有一个概念/包可以帮助我,或者这是我可以从头开始创建的东西


提前谢谢你

我过去也遇到过类似的问题,我找不到任何解决办法。 所以,我已经为此编写了我自己的函数,并且碰巧为您找到了这段旧代码。 它比你的问题做得更多,因为他还测试元素是否在sames类型上。 这是:

常量骨架={name:,email:,bio:{summary:,array:[],photo:}, 某物:,更多:,更多:}; 变量 test1={电子邮件:'new@email.com,bio:{photo:'url.com/new/photo'}, test1b={电子邮件:'new@email.com,bio:{photo:'url.com/new/photo',baddhing:25}, test1c={电子邮件:'new@email.com,bio:[1,2,3]}, test2={photo:'url.com/new/photo'}, testX=25; console.log“测试1符合->”,hasSamePlacedKeysskeleton,测试1; console.log“测试1b符合->”,hasSamePlacedKeysskeleton,测试1b; console.log“测试1c符合->”,hasSamePlacedKeysskeleton,测试1c; console.log“测试2符合->”,hasSamePlacedKeysskeleton,测试2; console.log“测试X符合->”,hasSamePlacedKeysskeleton,testX; 函数hasSamePlacedKeys refSkeleton,testObject { 允许 objType=typeoftestObject, noErr=objType==='object'&&!Array.isArraytestObject ; for let键入testObject { noErr=refSkeleton.hasOwnPropertykey; objType=typeoftestObject[key]; 如果没有 {noErr=objType===typeofrefSkeleton[key]} 如果noErr&&objType==='object'{ if Array.isArraytestObject[键] {noErr=Array.isArrayrefSkeleton[key]} 其他的 {noErr=hasSamePlacedKeysrefSkeleton[key],testObject[key]} } 如果!没有中断; } 返回noErr;
}因此,您要求的是JSON模式或类似的。我只是不知道你是否需要它来编写单元测试或函数的参数验证函数的参数验证检查或尝试另一个JSON模式哇,这正是我头脑中编写的函数!我想这是最好的办法。