如何在JS嵌套数组查询中仅获取true/false布尔判断结果
解决方案
原生JavaScript实现
你当前代码使用filter会返回符合条件的子数组集合,本身是数组类型,因此无法得到布尔值结果。只需将外层的filter替换为Array.prototype.some方法即可,some方法会在检测到第一个符合条件的元素时直接终止遍历并返回布尔值true,所有元素都不符合条件则返回false,比filter遍历全数组的效率更高。
修改后代码如下:
var parentArray = [ [0.49988811188811194, 0.17249417249417248], [0.8181398601398602, null], [0.8181398601398602, 0.47785547785547783], [0.49988811188811194, 0.47785547785547783] ]; function containsNull(arr) { // 外层遍历所有子数组,内层遍历子数组元素判断是否存在null return arr.some(subArr => subArr.some(el => el == null)); } console.log("-->", containsNull(parentArray)) // 输出 --> true
Lodash实现
有两种常用实现方案:
- 嵌套使用
_.some,逻辑和原生实现一致,性能最优:
const containsNull = arr => _.some(arr, subArr => _.some(subArr, el => el == null));
- 先拍平二维数组再做判断,写法更简洁:
const containsNull = arr => _.some(_.flatten(arr), el => el == null);
注意:如果你只需要严格匹配null、不需要同时匹配undefined,可以将判断条件里的el == null改为el === null即可。
内容的提问来源于stack exchange,提问作者Vikas Acharya
相关产品推荐
相关产品推荐

