js 双存循环如何快速高效判断数组里面的条件是否满足

原始数组:

 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('通过!')
    }
阅读 2.3k
4 个回答

你的代码没毛病,除了 return v.inNum 那里,因为 -1 也会判 true,这样的话 inNum: -1 会被判允许。直接返回 false 就好 —— 既然如此,就不需要 if 语句了,直接 return i.inNum >= 0undefined >= 0false)。

只是还可以再简单一点:

const validate = arr.every(({ sourceList }) => sourceList?.every(({ inNum }) => inNum ?? -1 >= 0));

稍微排一下版,两层 every:

const validate = arr.every(({ sourceList }) =>
    sourceList?.every(({ inNum }) => inNum ?? -1 >= 0)
);

给你的四个思考题
外面一层every的回调没有返回值?
里面一层every的回调返回值类型不同?
inNum是v的成员还是i的成员?
some会不会比every效率高?

内层的every要return出去

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏