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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:45:04