Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问具有循环但未定义过多的嵌套对象?_Javascript_Arrays_Object_For In Loop - Fatal编程技术网

Javascript 访问具有循环但未定义过多的嵌套对象?

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(候选

我正在使用一个对象文本,试图访问嵌套数组并遍历一个循环,但它在我的控制台中显示59次和5次未定义,然后显示数组。如何阻止它在控制台中执行未定义的操作?谢谢

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