如何在 JavaScript 中检查对象的值? [复制]
Posted
技术标签:
【中文标题】如何在 JavaScript 中检查对象的值? [复制]【英文标题】:How can I check the values of an object in JavaScript? [duplicate] 【发布时间】:2021-10-08 05:19:45 【问题描述】:用例:我有一个由对象表示的 http 请求,我想在使用请求进行 http 调用之前检查对象的字段(即 makeHttpCall(request))。例如,给定以下对象:
"classic": false,
"billing-account": "1234567890",
"device": "123456"
我想验证对象中的以下字段:
“经典”是布尔真/假 “billing-account”是一个长度为9的字符串 “device”值是一个长度为6的字符串我希望能够编写一个可用于验证字段的配置,类似于 PropTypes 或 Formik。例如:
"classic": boolean
"billing-account": string.length===9
"device": string.length===9
更新: 是的,我一直在寻找https://github.com/jquense/yup
【问题讨论】:
向我们展示您的尝试。 SO 不是免费的代码编写服务。此处的目的是让您发布解决自己问题的尝试,并在其他人无法按预期工作时提供帮助。见How to Ask 和minimal reproducible example 常见、经过充分测试且非常受欢迎的选项包括 joi 和 validatorjs。 您需要在示例中使用函数,例如classic: x => typeof x === "boolean"
。接下来,您可以遍历键并将值传递给验证器函数。
谢谢@jarmond,我会调查这些
复制:javascript - elegant way to check object has required properties
【参考方案1】:
您可以创建一个函数来验证每个键作为 if 语句:
const request1 =
"classic": false,
"billing-account": "1234567890",
"device": "123456"
const request2 =
"classic": false,
"billing-account": "123456789",
"device": "123456"
console.log(validate(request1)); // false
console.log(validate(request2)); // true
function validate(obj)
return typeof obj["classic"] === "boolean" &&
obj["billing-account"].length === 9 &&
obj["device"].length === 6;
【讨论】:
谢谢!这是我一直在寻找的东西 这打破了"billing-account": 123456789
【参考方案2】:
您可以创建一个具有函数属性的条件对象,然后循环遍历属性并检查对象中的相应属性以进行验证。
const obj =
"classic": false,
"billing-account": "123456789",
"device": "123456"
const conditions =
"classic": e => typeof e == "boolean",
"billing-account": e => e.length == 9,
"device": e => e.length == 6
function validate(s)
var isValid = true;
Object.keys(s).forEach(e => isValid = !conditions[e](s[e]) ? false : isValid);
return isValid;
console.log(validate(obj));
【讨论】:
@ChrisG 是什么让你说它坏了? @ChrisG 问题中没有提到,这甚至不是 OP 遇到的主要问题。我假设提问者已经编写了正确的验证函数,但他们只是在寻找如何将它们组合在一起。 @ChrisG 另外,它不会中断,因为undefined
不等于9
。
这是对的,但对于不是字符串但长度属性值为9
的内容,它会给出错误的结果。为确保它是一个字符串,无论如何切片,都需要使用typeof e === "string"
。以上是关于如何在 JavaScript 中检查对象的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果json对象键在javascript中具有所有相同的值,如何检查并返回true?
Angular 2 / Typescript - 如何检查对象数组以查看属性是不是具有相同的值?