You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:54:05