如何在 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?

在javascript中搜索对象中的值[关闭]

检查对象中的值是不是为空或空javascript

Angular 2 / Typescript - 如何检查对象数组以查看属性是不是具有相同的值?

如何检查一个对象是不是至少包含一个键,其值包含 JavaScript 中的子字符串?

如何检查列表中相邻项目的值? Javascript