console.log可见数组存在目标值,lodash.find查找返回undefined如何解决
问题原因
- 类型不匹配:代码中使用严格相等运算符
===进行判断,当$scope.levels数组中存储的levelIndex为字符串类型(比如值为"3")时,和数字类型的level + 1(值为3)进行严格相等比较会返回false,导致匹配不到对应项。 - 数组加载时序问题:如果
$scope.levels是通过接口请求等异步方式获取的,执行_.find代码时异步请求还未返回,$scope.levels还是空数组/未完成赋值,自然匹配不到对应项。控制台看到的$scope.levels有值,是因为控制台打印引用类型时,展示的是点击展开时的实时值,而非代码执行时的快照值。 - 数组无匹配项:
$scope.levels数组中确实不存在levelIndex等于3的项,导致匹配失败返回undefined。
解决方法
- 类型匹配处理:如果确认
levelIndex存在数值为3的项,只是类型不同,可以调整判断逻辑:
// 方法1:用非严格相等,会自动做类型转换 var lvl = _.find($scope.levels, function(l) { return l.levelIndex == level + 1; }); // 方法2:主动统一转成数字后再严格比较,更严谨 var target = level + 1; var lvl = _.find($scope.levels, function(l) { return Number(l.levelIndex) === target; });
- 异步时序问题处理:把
_.find的执行逻辑放到$scope.levels赋值完成的回调中,比如接口请求的success回调、通过watch监听$scope.levels变化后再执行匹配逻辑。 - 校验数组数据:先打印代码执行时
$scope.levels的长度、全量值快照,确认是否存在levelIndex为3的项,补全对应数据即可。
内容的提问来源于stack exchange,提问作者vdvaart
相关产品推荐
相关产品推荐

