【问题标题】:How can I check the values of an object in JavaScript? [duplicate]如何在 JavaScript 中检查对象的值? [复制]
【发布时间】: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

【问题讨论】:

标签: javascript reactjs


【解决方案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"
猜你喜欢
  • 2016-04-10
  • 2018-03-08
  • 2016-07-12
  • 2010-10-02
  • 2012-12-24
  • 2012-06-05
  • 1970-01-01
  • 2021-08-15
  • 2018-12-23
相关资源
最近更新 更多