【发布时间】:2021-03-09 18:40:00
【问题描述】:
我通过 HTTP 请求收到一个 JSON 对象。我只想检查该对象是否只有我想要的字段,不需要检查它们的值。 我这样做了:
function checkObject(o1, o2) {
for (const p1 in o1) {
for (const p2 in o2) {
if (o1.hasOwnProperty(p2) === false) {
return false;
}
if (o2.hasOwnProperty(p1) === false) {
return false;
}
}
}
return true;
}
这是有效的对象。我只想接受这个 body 的请求,不关心值。
const validObject = {
country: '',
name: '',
zip: '',
//etc
};
在此之后,我执行一个 if 语句,例如:
if(checkObject(validObject, receivedObject)){
//do stuff here
}else{
//reject the request
}
好吧,这行得通,但它太丑陋了。它没有通过 lint 测试并且有太多的 for 循环。你怎么看?有没有其他方法可以做同样的事情? 谢谢!!
【问题讨论】:
-
首先获取密钥:
const keys1 = Object.keys(o1)。接下来,按字母顺序对它们进行排序:keys1.sort((a, b) => a > b)。最后,字符串化:const json1 = JSON.stringify(keys1);。生成的两个字符串应该是相同的。 -
此外,根据您用于编写 http 端点的库,它可能已经包含一种验证您收到的内容的方法。 Chris G 的想法会很有效。
-
谢谢你们! @ChrisG 是的,这行得通。
标签: javascript node.js