嵌套形状验证javascript

嵌套形状验证javascript,javascript,lodash,Javascript,Lodash,我希望valid为false,但它返回true,尽管value.min未定义。这里的问题是什么?问题是第一个条件(o.value)对第二个项目返回true——因为value是一个对象,因此不是falsy——所以对min/max的检查永远不会运行 const x=[ { 价值:1 }, { 价值:{ min:未定义, 最高:2 } } ]; //用于检查空/未定义的实用程序 常数c=v=>v!=无效的 console.log(x.every({value})=>( 值的类型===“对象” ?c(


我希望valid为false,但它返回true,尽管value.min未定义。这里的问题是什么?

问题是第一个条件(
o.value
)对第二个项目返回true——因为
value
是一个对象,因此不是falsy——所以对min/max的检查永远不会运行

const x=[
{
价值:1
},
{
价值:{
min:未定义,
最高:2
}
}
];
//用于检查空/未定义的实用程序
常数c=v=>v!=无效的
console.log(x.every({value})=>(
值的类型===“对象”
?c(最小值)和c(最大值)
:c(数值)

)));
您应该尝试让您的问题更清楚一点,“验证”在这种情况下的确切含义是什么?如果值也可以接受字符串呢?typeof o.value==='string'?您可以颠倒顺序,检查最小/最大测试的'object',然后检查原语。
import get from "lodash.get";

const x = [
  {
    value: 1
  },
  {
    value: {
      min: undefined,
      max: 2
    }
  }
];

console.log(
  "valid: ",
  x.every(o => o.value || (get(o, "value.min") && get(o, "value.max")))
);