gpt4 book ai didi

javascript - 比较对象 Prop 级别与可选 Prop

转载 作者:行者123 更新时间:2023-12-02 23:47:41 27 4
gpt4 key购买 nike

这是我寻求指导的问题类型,因为我不确定我正在寻找的内容是否存在......

上下文:我正在使用 Firestore 来保存数据,并且正在构建一个可重用的自定义 Hook (React 16.8),以便在我想要将数据保存到用户对象时使用。当我使用钩子(Hook)时,我会发送需要保存的 Prop ,但所有 Prop 都是可选的。我想做的基本上是设置我的完整 Firestore 对象应该在客户端的结构,然后比较 props 参数以确保它遵循约定原来的。

由于所有 Prop 都是可选的,因此我只是尝试比较键的级别,而不是值的相等性。原始骨架看起来像这样:

火存储对象

{
name,
email,
bio {
summary,
array,
photo
},
something,
more,
much
}

然后,当我单击应用程序中的保存按钮时,我会将 Prop 发送到我的钩子(Hook),可能如下所示(注意不完整):

{
email: 'new@email.com',
bio: {
photo: 'url.com/new/photo'
}
}

上面的对象将通过测试。但是如果我传递这样的 Prop :

{
photo: 'url.com/new/photo'
}

我的比较会检测到 photo 处于错误的级别,因为它应该是 bio 下的一个级别。

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

提前谢谢您!

最佳答案

我过去也遇到过类似的问题,但我找不到任何解决方案。所以,我为此编写了自己的函数,并且偶然为你找到了这个旧代码。它比你的问题多一点,因为他还测试元素是否属于同一类型。这是:

const skeleton = { name:'',  email:'',  bio: { summary :'', array:[], photo:'' },
something:'', more:'', much:'' };

var
test1 = { email: 'new@email.com', bio: { photo: 'url.com/new/photo' } },
test1b = { email: 'new@email.com', bio: { photo: 'url.com/new/photo', badThing: 25 } },
test1c = { email: 'new@email.com', bio: [1,2,3] },
test2 = { photo: 'url.com/new/photo'},
testX = 25;


console.log ('test 1 is conform ->' , hasSamePlacedKeys(skeleton, test1 ));
console.log ('test 1b is conform ->' , hasSamePlacedKeys(skeleton, test1b ));
console.log ('test 1c is conform ->' , hasSamePlacedKeys(skeleton, test1c ));
console.log ('test 2 is conform ->' , hasSamePlacedKeys(skeleton, test2 ));
console.log ('test X is conform ->' , hasSamePlacedKeys(skeleton, testX ));



function hasSamePlacedKeys( refSkeleton, testObject )
{
let
objType = typeof(testObject),
noErr = ( objType==='object' && !Array.isArray(testObject) )
;

for (let key in testObject )
{
noErr = refSkeleton.hasOwnProperty(key);
objType = typeof(testObject[key]);

if (noErr)
{ noErr = (objType === typeof(refSkeleton[key]) ) }

if (noErr && objType==='object') {
if ( Array.isArray(testObject[key]) )
{ noErr = Array.isArray(refSkeleton[key]) }
else
{ noErr = hasSamePlacedKeys(refSkeleton[key], testObject[key] ) }
}

if (!noErr) break;
}
return noErr;
}

关于javascript - 比较对象 Prop 级别与可选 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55779282/

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