使用getJSON获取JSON数据时出现related[i] undefined错误求助
问题分析与解决方案
嘿,我来帮你拆解下这个问题~
你遇到的related[i] is undefined错误,核心原因是遍历的数组和你访问的数组长度不匹配:
- 你通过
slice(0,3)得到的related数组只有3个元素,对应的索引是0、1、2 - 但你用
$.each(json, function(i) {...})遍历的是整个原始json数组(假设它的长度远大于3) - 当遍历到
json中索引≥3的元素时,related里根本没有这个位置的元素,自然就会抛出undefined的错误
至于你为什么还能在控制台看到sizeClass的正确输出?因为前3次循环(i=0、1、2)时,related[i]是存在的,这几次能正常执行;后面的循环才会触发错误,所以你会同时看到正确输出和错误提示。
针对你的需求,给两种解决方案:
方案1:只想遍历那3个筛选后的元素(最可能是你的真实需求)
把遍历的对象从json改成related,甚至可以直接用$.each提供的当前元素参数,不用通过索引取值,更安全:
$.getJSON(projects, function (json) { var firstThree = json.sort(function(a, b) { return a.Variable1 < b.Variable1 ? 1 : -1; }).slice(0, 3); var related = firstThree; $.each(related, function(index, item) { // 遍历related数组,item就是当前元素 var sizeClass = JSON.stringify(item.pname); console.log('sifzdfze'+sizeClass); }); });
方案2:必须遍历整个json数组,但只在索引有效时访问related
如果你的业务逻辑确实需要遍历全部json元素,那要加个判断,确保只在i处于related的索引范围内时才访问:
$.getJSON(projects, function (json) { var firstThree = json.sort(function(a, b) { return a.Variable1 < b.Variable1 ? 1 : -1; }).slice(0, 3); var related = firstThree; $.each(json, function(i) { // 先判断i是否在related的有效索引范围内 if (i < related.length) { var sizeClass = JSON.stringify(related[i].pname); console.log('sifzdfze'+sizeClass); } }); });
内容的提问来源于stack exchange,提问作者Jonathan Frederick
相关产品推荐
相关产品推荐

