Получить значение из массива внутри объекта, проблема объема

0

Я работаю над этим кодедином. Ссылка здесь. http://codepen.io/sweenj7/pen/RPYrrE

У меня проблемы в этой области.

 //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] );

Я пытаюсь получить каждое значение массива для печати в списке аккордеона в его индексированном месте. По какой-то причине я получаю TypeError, что 0 не определено, но когда я его распечатываю весь массив с помощью weightReps вместо weightReps [i или 1,2 и т.д.], Он работает и печатает весь массив. Не уверен, для чего это решение.

  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
    у вас нет свойства weightReps назначенного для всех ваших объектов; когда он попадает в excercises[1] , свойство weightReps отсутствует, поэтому .weightReps[0] будет undefined .
  • 0
    Предложение ... похоже, что работа с отображающими массивами и объектами - новинка ... попробуйте поработать с ними в простой песочнице, которая просто отображает ваши данные и позволяет вам быстро попробовать что-либо для манипулирования этими данными Пример: plnkr.co/edit/vxgyGS12yx4PgOqWw34p
Показать ещё 1 комментарий
Теги:
ionic-framework
arrays
javascript-objects

1 ответ

1

Кудри и приседания не имеют свойства weightReps поэтому он бомбит, когда вы пытаетесь прочитать указанное свойство.

Измените коллекцию, чтобы добавить свойство, но вам также нужно добавить повторений в каждую коллекцию weightReps чтобы при вызове [object].weightReps[0] вы не возвращали нуль.

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]};
  • 0
    Спасибо всем, добавление weightReps и eightSets к другим объектам устранило проблему. Я думал, что это сработает для первого и разорвется дальше по петле. Это работает отлично. code $ scope.groups [i] .items.push ("Set" + j + "" + упражнения [i] .weightSets [j-1]); code

Ещё вопросы

Сообщество Overcoder
Наверх
Меню