Javascript 从数组中的JSON对象提取的变量正确地记录到循环中的控制台,但在同一循环中用于求和时返回未定义的变量

Javascript 从数组中的JSON对象提取的变量正确地记录到循环中的控制台,但在同一循环中用于求和时返回未定义的变量,javascript,loops,for-loop,javascript-objects,Javascript,Loops,For Loop,Javascript Objects,我想循环数组中的一些对象,并将它们的值相加。我可以单独记录每个键的值,如下所示: console.log(workouts[0].exercises[0].break); 但当我将它们插入循环时,控制台返回以下错误: 未捕获的TypeError:无法读取未定义的属性“duration” 如果我把目标行放在“break”的前面,它说它不能读取undefined的属性'break',这意味着“exercises”没有正确定义,但正如我之前所说的,我可以让它记录它的值,没有问题 如果不可定义,如何记

我想循环数组中的一些对象,并将它们的值相加。我可以单独记录每个键的值,如下所示:

console.log(workouts[0].exercises[0].break);
但当我将它们插入循环时,控制台返回以下错误:

未捕获的TypeError:无法读取未定义的属性“duration”

如果我把目标行放在“break”的前面,它说它不能读取undefined的属性'break',这意味着“exercises”没有正确定义,但正如我之前所说的,我可以让它记录它的值,没有问题

如果不可定义,如何记录正确的值? 这是我的密码:

  var workouts = {
  "workouts":
  [
    {
      "title": "Full Body",
      "exercises":
      [
        {
          "name": "Push Ups",
          "duration": 30,
          "break": 10
        },
        {
          "name": "Squats",
          "duration": 30,
          "break": 10
        },
        {
          "name": "Running in Place",
          "duration": 30,
          "break": 10
        }
      ]
    }
  ]
  };

  for (var  i = 0; i < workouts.length; i++)
  {
    for (var  k = 0; k != workouts.length; k++)
    var durations = workouts[i].exercises[k].duration;
    var breaks = workouts[i].exercises[k].break;
    var totalTime = durations + durations;
    console.log(totalTime);
  }
var训练={
“训练”:
[
{
“标题”:“全身”,
“练习”:
[
{
“姓名”:“俯卧撑”,
“持续时间”:30,
“休息”:10
},
{
“名称”:“蹲下”,
“持续时间”:30,
“休息”:10
},
{
“名称”:“就地运行”,
“持续时间”:30,
“休息”:10
}
]
}
]
};
对于(var i=0;i
尝试
训练[“训练”][i]。练习[k]。休息
。不要使用锻炼对象的
i
来循环练习。通过练习获得长度。使用长度创建一个新循环。

尝试
训练[“训练”][i]。练习[k]。打断。不要使用锻炼对象的
i
来循环练习。使用exercises.length获取长度,并使用它创建一个新循环。

var-workouts={
var workouts = {
  "workouts":
  [
    {
      "title": "Full Body",
      "exercises":
      [
        {
          "name": "Push Ups",
          "duration": 30,
          "break": 10
        },
        {
          "name": "Squats",
          "duration": 30,
          "break": 10
        },
        {
          "name": "Running in Place",
          "duration": 30,
          "break": 10
        }
      ]
    }
  ]
  };
console.log(workouts.workouts[0].exercises.length)
  for (var  i = 0; i < workouts.workouts[0].exercises.length; i++)
  {
    console.log(workouts.workouts[0].exercises[i].break); 
    var durations = workouts.workouts[0].exercises[i].duration; 
    var breaks = workouts.workouts[0].exercises[i].break;
    var totalTime = durations + breaks;
    console.log(totalTime);
  }
“训练”: [ { “标题”:“全身”, “练习”: [ { “姓名”:“俯卧撑”, “持续时间”:30, “休息”:10 }, { “名称”:“蹲下”, “持续时间”:30, “休息”:10 }, { “名称”:“就地运行”, “持续时间”:30, “休息”:10 } ] } ] }; console.log(训练。训练[0]。练习。长度) 对于(var i=0;i<训练。训练[0]。练习。长度;i++) { console.log(workouts.workouts[0].练习[i].休息); var durations=训练。训练[0]。练习[i]。持续时间; var breaks=训练。训练[0]。练习[i]。休息; var totalTime=持续时间+中断; console.log(总时间); }
var训练={
“训练”:
[
{
“标题”:“全身”,
“练习”:
[
{
“姓名”:“俯卧撑”,
“持续时间”:30,
“休息”:10
},
{
“名称”:“蹲下”,
“持续时间”:30,
“休息”:10
},
{
“名称”:“就地运行”,
“持续时间”:30,
“休息”:10
}
]
}
]
};
console.log(训练。训练[0]。练习。长度)
对于(var i=0;i<训练。训练[0]。练习。长度;i++)
{
console.log(workouts.workouts[0].练习[i].休息);
var durations=训练。训练[0]。练习[i]。持续时间;
var breaks=训练。训练[0]。练习[i]。休息;
var totalTime=持续时间+中断;
console.log(总时间);
}

问题在于语法

var breaks=训练[i]。练习[i]。休息

应该是
var breaks=训练[i]。练习[i]。休息


此外,像我的同事建议的那样,使用嵌套循环迭代数组

问题在于您的语法

var breaks=训练[i]。练习[i]。休息

应该是
var breaks=训练[i]。练习[i]。休息


此外,像我的同事建议的那样,使用嵌套循环迭代数组

猜测JSON中的更多数据需要这样做:

对象需要训练[“训练”]部分,它们需要键,而不仅仅是数组索引号[n]。也可以写成训练。训练[n]。练习[n]

var训练={
“训练”:[{
“标题”:“全身”,
“练习”:[{
“姓名”:“俯卧撑”,
“持续时间”:30,
“休息”:10
}, {
“名称”:“蹲下”,
“持续时间”:30,
“休息”:10
}, {
“名称”:“就地运行”,
“持续时间”:30,
“休息”:10
}]
}, {
“标题”:“下半身”,
“练习”:[{
“名称”:“蹲下”,
“持续时间”:30,
“休息”:10
}, {
“名称”:“就地运行”,
“持续时间”:30,
“休息”:10
}]
}]
};
var totalTime=0;
对于(变量i=0;i<训练[“训练”]。长度;i++){
对于(var j=0;j
猜测JSON中的更多数据需要这样做:

对象需要训练[“训练”]部分,它们需要键,而不仅仅是数组索引号[n]。也可以写成训练。训练[n]。练习[n]

var训练={
“训练”:[{
“标题”:“全身”,
“练习”:[{
“姓名”:“俯卧撑”,
“持续时间”:30,
“休息”:10
}, {
“名称”:“蹲下”,
“持续时间”:30,
“休息”:10
}, {
“名称”:“就地运行”,
“持续时间”:30,
“休息”:10
}]
}, {
“标题”:“下半身”,
“练习”:[{
“名称”:“蹲下”,
“杜拉特
var workouts = {
  "workouts": [{
    "title": "Full Body",
    "exercises": [{
      "name": "Push Ups",
      "duration": 30,
      "break": 10
    }, {
      "name": "Squats",
      "duration": 30,
      "break": 10
    }, {
      "name": "Running in Place",
      "duration": 30,
      "break": 10
    }]
  }, {
    "title": "Lower Body",
    "exercises": [{
      "name": "Squats",
      "duration": 30,
      "break": 10
    }, {
      "name": "Running in Place",
      "duration": 30,
      "break": 10
    }]
  }]
};

var totalTime = 0;
for (var i = 0; i < workouts["workouts"].length; i++) {
  for (var j = 0; j < workouts["workouts"][i].exercises.length; j++) {
    var durations = workouts["workouts"][i].exercises[j].duration;
    var breaks = workouts["workouts"][i].exercises[j].break;
    totalTime = totalTime + durations + breaks;
    console.log(workouts.workouts[i].title + " (" + workouts.workouts[i].exercises[j].name + "): " + (durations+breaks) + " \n ");
  }
}
console.log("total: " +totalTime);