原始数组:
const arr = [
{
name: 'zs',
age: 12,
sourceList: [
{
_editable_: false,
inNum: -1,
name: 'wangwei',
},
{
_editable_: false,
inNum: 10,
name: 'limei',
},
{
_editable_: true,
inNum: 12,
name: 'qqq',
},
],
},
{
name: 'lisu',
age: 16,
sourceList: [
{
_editable_: true,
inNum: 6,
name: 'wangwei',
},
{
_editable_: false,
inNum: null,
name: 'limei',
},
{
_editable_: false,
inNum: 0,
name: 'qqq',
},
],
},
]
希望能够快速检测数组里面的sourceList的inNum,inNum必填,大于0;得到一个ture执行下一步操作。
鄙人简陋的伪代码不知道是否能行,望指正!:
const validate = arr.every(v => {
v.sourceList.every(i => {
if (i.inNum && i.inNum >= 0) {
return i
}
return v.inNum
})
})
if (validate) {
console.log('通过!')
}
你的代码没毛病,除了
return v.inNum
那里,因为-1
也会判true
,这样的话inNum: -1
会被判允许。直接返回false
就好 —— 既然如此,就不需要if
语句了,直接return i.inNum >= 0
(undefined >= 0
是false
)。只是还可以再简单一点:
稍微排一下版,两层 every: