Javascript 为什么我的嵌套对象在循环时返回未定义?

Javascript 为什么我的嵌套对象在循环时返回未定义?,javascript,for-loop,Javascript,For Loop,即使它的工作,因为它应该我希望是无错误的。多谢各位 完整代码: 标题 .科{ 利润率:20px; 填充:10px; } 切换 切换式飞机 拨动苹果 短吻鳄 切换b 拨动式浴缸 拨动自行车 钮扣熊 切换c 拨动椅 拨动胡萝卜 切换猫 {{thing.name}}内容 var myApp=angular.module('myApp',['ngAnimate','ngSanitize','ui.bootstrap']); myApp.controller('myCtrl',函数($scope){



即使它的工作,因为它应该我希望是无错误的。多谢各位

完整代码:


标题
.科{
利润率:20px;
填充:10px;
}
切换
切换式飞机
拨动苹果
短吻鳄
切换b
拨动式浴缸
拨动自行车
钮扣熊
切换c
拨动椅
拨动胡萝卜
切换猫
{{thing.name}}内容

var myApp=angular.module('myApp',['ngAnimate','ngSanitize','ui.bootstrap']); myApp.controller('myCtrl',函数($scope){ $scope.oneAtATime=true; $scope.allchildrenLength=9; $scope.allparentsLength=3; $scope.myFunction=function(indexParent){ //首先关闭外部选项卡 $scope.lettersandsthings[indexParent]。打开=!$scope.lettersandsthings[indexParent]。打开; //如果外部父项已关闭或任何其他选项卡已打开,请关闭所有内部选项卡 对于(i=0;i<$scope.allchildrenLength;i++){ 对于(变量j=0;j<$scope.allparentsllength;j++){ $scope.lettersandthings[j]。things[i]。open=!$scope.lettersandthings[indexParent]。open | |$scope.lettersandthings[j]。open?false:$scope.lettersandthings[j]。things[i]。open; } } } $scope.lettersandsthings=[ {字母:“a”,事物:[{名字:“飞机”},{名字:“苹果”},{名字:“鳄鱼”}]}, {字母:“b”,事物:[{name:“bath”},{name:“bicycle”},{name:“bear”}]}, {字母:“c”,事物:[{name:“chair”},{name:“carrot”},{name:“cat”}]} ]; });
您正在访问例如
东西[3]
但是,尽管您总共有9件东西,但是您的
东西
数组中的每一件只有3个元素长,因此第四个元素(以及之后一直到第九个元素)是
未定义的

在迭代之前,您应该切换内部循环和外部循环,并检查每个
事物
数组的长度

for(j=0; j < $scope.allparentsLength; j++) { 
  for(i=0; i< $scope.lettersandthings[j]. things.length; i++) { 
    $scope.lettersandthings[j].things[i].open = !$scope.lettersandthings[indexParent].open || $scope.lettersandthings[j].open ? false : $scope.lettersandthings[j].things[i].open; 
  } 
}
(j=0;j<$scope.allparentsLength;j++)的

对于(i=0;i<$scope.letersandthings[j].things.length;i++{
$scope.lettersandthings[j]。things[i]。open=!$scope.lettersandthings[indexParent]。open | |$scope.lettersandthings[j]。open?false:$scope.lettersandthings[j]。things[i]。open;
} 
}

您正在将
j
0
循环到
<$scope.allparentsLength
,然后索引到
$scope.lettersandthings
。要使用
for
循环正确循环,请使条件
j<
$scope.lettersandthings.length
。我猜在某种程度上,
$scope.lettersandsthings.length`与
$scope.allparentsLength
不一样。你是你的帮手:按照这样的方式,你的整个问题(包括任何必要的代码)必须在你的问题中,而不仅仅是链接。原因有两个:人们不应该非得去场外帮助你;链接腐烂,使问题及其答案对未来的人们毫无用处。请在问题中加一个字母。更多:谢谢你的反馈。我以后会记住这一点。非常感谢。这就是我一直在寻找的答案。
$scope.allchildrenLength = 9;
$scope.allparentsLength = 3;
ng-click="myFunction(0)" <!-- indexParent -->
ng-click="myFunction(1)"
ng-click="myFunction(2)"
for(i=0; i < $scope.allchildrenLength; i++) {
    for(var j=0; j < $scope.allparentsLength; j++)  {
      $scope.lettersandthings[j].things[i].open = !$scope.lettersandthings[indexParent].open || $scope.lettersandthings[j].open ? false : $scope.lettersandthings[j].things[i].open;
    }
  }
for(var lttr in $scope.lettersandthings) {
    for(var thng in $scope.lettersandthings[lttr]) {
      $scope.lettersandthings[lttr].things[thng].open = !$scope.lettersandthings[indexParent].open || $scope.lettersandthings[lttr].open ? false : $scope.lettersandthings[lttr].things[thng].open;
    }
  }
for(j=0; j < $scope.allparentsLength; j++) { 
  for(i=0; i< $scope.lettersandthings[j]. things.length; i++) { 
    $scope.lettersandthings[j].things[i].open = !$scope.lettersandthings[indexParent].open || $scope.lettersandthings[j].open ? false : $scope.lettersandthings[j].things[i].open; 
  } 
}