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);