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