Javascript 访问具有循环但未定义过多的嵌套对象?
我正在使用一个对象文本,试图访问嵌套数组并遍历一个循环,但它在我的控制台中显示59次和5次未定义,然后显示数组。如何阻止它在控制台中执行未定义的操作?谢谢Javascript 访问具有循环但未定义过多的嵌套对象?,javascript,arrays,object,for-in-loop,Javascript,Arrays,Object,For In Loop,我正在使用一个对象文本,试图访问嵌套数组并遍历一个循环,但它在我的控制台中显示59次和5次未定义,然后显示数组。如何阻止它在控制台中执行未定义的操作?谢谢 var votingData={ 候选人:[{ 姓名:“哈里·S·杜鲁门”, 政党:“民主” }, { 姓名:“托马斯·E·杜威”, 政党:“共和党” }, { 姓名:“斯特罗姆·瑟蒙德”, 党:“Dixiecrat” }] } for(votingData中的var候选者){ if(votingData.hasOwnProperty(候选
var votingData={
候选人:[{
姓名:“哈里·S·杜鲁门”,
政党:“民主”
},
{
姓名:“托马斯·E·杜威”,
政党:“共和党”
},
{
姓名:“斯特罗姆·瑟蒙德”,
党:“Dixiecrat”
}]
}
for(votingData中的var候选者){
if(votingData.hasOwnProperty(候选)){
for(设i=0,j=votingData[candidate]。长度;i
您的for/in
循环导致了该问题,因为它不需要,因为votingData
只包含一个属性,候选者
。因为只有一个属性,所以您可以直接访问它,不需要循环
您只需要遍历votingData.candidates
属性中的数组,为此,您可以使用标准计数进行循环,或者更好地使用机制进行循环。这样做更好,因为它可以让您直接访问被循环的数组元素,而不需要索引器,而且语法更清晰,从而避免了类似这样的错误
var votingData={
候选人:[{
姓名:“哈里·S·杜鲁门”,
政党:“民主”
},
{
姓名:“托马斯·E·杜威”,
政党:“共和党”
},
{
姓名:“斯特罗姆·瑟蒙德”,
党:“Dixiecrat”
}],
};
//只需在votingData.candidates属性中的数组中循环
votingData.candidates.forEach(函数(候选者){
//现在“候选者”是一个对象,所以使用标准的“点符号”来访问
//当前对象的任何/所有属性都是解决方法。
console.log(candidate.name、candidate.party);
});
您的for/in
循环导致了问题,因为它不需要,因为votingData
只包含一个属性,候选者
。因为只有一个属性,所以您可以直接访问它,不需要循环
您只需要遍历votingData.candidates
属性中的数组,为此,您可以使用标准计数进行循环,或者更好地使用机制进行循环。这样做更好,因为它可以让您直接访问被循环的数组元素,而不需要索引器,而且语法更清晰,从而避免了类似这样的错误
var votingData={
候选人:[{
姓名:“哈里·S·杜鲁门”,
政党:“民主”
},
{
姓名:“托马斯·E·杜威”,
政党:“共和党”
},
{
姓名:“斯特罗姆·瑟蒙德”,
党:“Dixiecrat”
}],
};
//只需在votingData.candidates属性中的数组中循环
votingData.candidates.forEach(函数(候选者){
//现在“候选者”是一个对象,所以使用标准的“点符号”来访问
//当前对象的任何/所有属性都是解决方法。
console.log(candidate.name、candidate.party);
});代码>您的第一个for循环和if语句不是必需的。
您可能会得到很多未定义的属性,因为您有另一个属性正在for-in语句中计数
这里有一个示例,如果您愿意,它不使用forEach
编辑
格式化数据以提高可读性
var votingData={
候选人:[
{
姓名:“哈里·S·杜鲁门”,
政党:“民主”
},
{
姓名:“托马斯·E·杜威”,
政党:“共和党”
},
{
姓名:“斯特罗姆·瑟蒙德”,
党:“Dixiecrat”
}
],
非候选人:[]
}
for(设i=0,j=votingData.candidates.length;i }
您的第一个for循环和if语句不是必需的。
您可能会得到很多未定义的属性,因为您有另一个属性正在for-in语句中计数
这里有一个示例,如果您愿意,它不使用forEach
编辑
格式化数据以提高可读性
var votingData={
候选人:[
{
姓名:“哈里·S·杜鲁门”,
政党:“民主”
},
{
姓名:“托马斯·E·杜威”,
政党:“共和党”
},
{
姓名:“斯特罗姆·瑟蒙德”,
党:“Dixiecrat”
}
],
非候选人:[]
}
for(设i=0,j=votingData.candidates.length;i }
在控制台中独立运行代码时,我不会得到未定义的日志。是否有任何其他代码可能导致未定义的消息?使用for。。。在
中,检查是否存在可以强制为正整数的长度
属性对我来说似乎很奇怪,但它不应该像屏幕显示的那样产生未定义的
输出(无法在chrome/FF上重现)。在控制台中独立运行代码时,我不会得到未定义的日志。是否有任何其他代码可能导致未定义的消息?使用for。。。在
中,检查是否存在可以强制为正整数的长度
属性对我来说似乎很奇怪,但它不应该像屏幕显示的那样产生未定义的
输出(无法在chrome/FF上重现)“您正在使用数组上的for/in
循环”-不,他不是。只有他的格式和命名很混乱。@ASDFGerte是的。我又看了一眼,更新了答案以反映这一点。谢谢你透彻地解释了原因:)我是一个初学者,正在学习这门语言
var votingData = {
candidates: [{
name: "Harry S. Truman",
party: "Democratic"
},
{
name: "Thomas E. Dewey",
party: "Republican"
},
{
name: "Strom Thurmond",
party: "Dixiecrat"
}]
}
for(var candidate in votingData) {
if(votingData.hasOwnProperty(candidate)) {
for (let i = 0, j = votingData[candidate].length; i < j; i++) {
console.log(votingData[candidate][i].name, votingData[candidate]
[i].party);
}
}
}