从对象内部的数组中获取值,范围问题

时间:2021-09-19 23:01:46

I'm working on this codepen. Here is the link. http://codepen.io/sweenj7/pen/RPYrrE

我正在研究这个代码。链接在这里。 http://codepen.io/sweenj7/pen/RPYrrE

I'm having trouble in this paticular area.

我在这个特殊区域遇到麻烦。

 //This prints the entire array 
        $scope.groups[i].items.push("Set " + j + " " +      exercises[i].weightReps );
      //This gets the following error TypeError: Cannot read property '0' of undefined 
        //$scope.groups[i].items.push("Set " + j + " " + exercises[i].weightReps[i] );

I'm trying to get each value of the array to print in the accordion list in it's indexed spot. For some reason I am getting a TypeError that 0 is undefied, but when I have it print the entire array with weightReps instead of weightReps[i or 1,2 etc] it works and prints the entire array. Not sure what the solution is for this.

我试图让数组的每个值在其索引点的手风琴列表中打印。由于某种原因,我得到一个0错误的TypeError,但是当我用weightReps而不是weightReps [i或1,2 etc]打印整个数组时,它可以工作并打印整个数组。不确定解决方案是什么。

  angular.module('ionicApp', ['ionic'])

  .controller('MyCtrl', function($scope) {
 $scope.groups = [];

   var Bench = { name:"Bench", StartingSets:"5", Instructions:"lift up arm press to chest", weightSets: ["125","200","200","245","150"], weightReps: ["8","8","10","10","15"] };
   var Curls = { name:"Curls", StartingSets:"3", Instructions:"lift up arm"};
   var Squat = { name:"Squat", StartingSets:"4", Instructions:"Squat Down"};
var  exercises = new Array(); 
exercises[0] = Bench;
exercises[1] = Curls;
exercises[2] = Squat;

 for (var i=0; i < exercises.length; i++) {
for (var key in exercises[i]) {

$scope.groups[i] = {
  name: exercises[i][Object.keys(exercises[i])[0]] + ' - ' + exercises[i][Object.keys(exercises[i])[1]] + " Sets" ,
  items: []
}
};
$scope.groups[i].items.push(exercises[i].Instructions);
for (var j=1; j-1<exercises[i][Object.keys(exercises[i])[1]]; j++) {
  //for (var key in exercises[i]) {
 //   $scope.groups[i].items.push(JSON.stringify(exercises[i]) + '-' + j);
    //$scope.groups[i].items.push(exercises[i].StartingSets + '-' + j);
   //console.log(exercises[i].weightReps[i]);
  //This prints the entire array 
    $scope.groups[i].items.push("Set " + j + " " + exercises[i].weightReps );
  //This gets the following error TypeError: Cannot read property '0' of undefined 
    //$scope.groups[i].items.push("Set " + j + " " + exercises[i].weightReps[i] );

  //$scope.groups[i].items.push(exercises[i][key] + '-' + j);
}
  }

 /*
   * if given group is the selected group, deselect it
   * else, select the given group
   */
  $scope.toggleGroup = function(group) {
    if ($scope.isGroupShown(group)) {
  $scope.shownGroup = null;
} else {
  $scope.shownGroup = group;
}
  };
 $scope.isGroupShown = function(group) {
         return $scope.shownGroup === group;
  };

});

1 个解决方案

#1


1  

Curls and Squats do not have the property weightReps so it bombs when you try to read said property.

卷发和深蹲没有属性weightReps,因此当你试图阅读所述属性时它就会爆炸。

Modify the collection to this to add the property, but you also need to add reps to each weightReps collection so that when you call [object].weightReps[0] you don't get back a null.

将集合修改为此属性以添加属性,但您还需要向每个weightReps集合添加代表,以便在调用[object] .weightReps [0]时不会返回null。

var Bench = { name:"Bench", StartingSets:"5", Instructions:"lift up arm press to chest", weightSets: ["125","200","200","245","150"], weightReps: ["8","8","10","10","15"] };
var Curls = { name:"Curls", StartingSets:"3", Instructions:"lift up arm", weightSets: [ADD SOME SETS HERE]};
var Squat = { name:"Squat", StartingSets:"4", Instructions:"Squat Down",weightSets: [ADD SOME SETS HERE]};

#1


1  

Curls and Squats do not have the property weightReps so it bombs when you try to read said property.

卷发和深蹲没有属性weightReps,因此当你试图阅读所述属性时它就会爆炸。

Modify the collection to this to add the property, but you also need to add reps to each weightReps collection so that when you call [object].weightReps[0] you don't get back a null.

将集合修改为此属性以添加属性,但您还需要向每个weightReps集合添加代表,以便在调用[object] .weightReps [0]时不会返回null。

var Bench = { name:"Bench", StartingSets:"5", Instructions:"lift up arm press to chest", weightSets: ["125","200","200","245","150"], weightReps: ["8","8","10","10","15"] };
var Curls = { name:"Curls", StartingSets:"3", Instructions:"lift up arm", weightSets: [ADD SOME SETS HERE]};
var Squat = { name:"Squat", StartingSets:"4", Instructions:"Squat Down",weightSets: [ADD SOME SETS HERE]};