2016-04-30 28 views
4

6つのJSON応答を保持する多次元配列を作成しようとしています。私は助けのために他の人を見ていました:私は多次元配列のコンソールログをテストすると "Array array:undefined"という出力を得て、配列全体のこのインデックスだけを呼び出すと[object Object]が返されます。AngularJS多次元配列とJSONデータ

$scope.pokeArray = new Array(11); 
     $http.get("http://pokeapi.co/api/v2/pokemon/"+searchedName +".json") 
      .success(function (response) 
       { 
        //Get first form FORMS array, assign name 
        $scope.pokeArray[0] = response.forms[0].name; 
        //13 ID 
        $scope.pokeArray[1] = response.id; 
        //10 Height 
        $scope.pokeArray[2] = response.height; 
        //7 Sprites 
        $scope.pokeArray[3] = response.sprites.front_default; 
        $scope.pokeArray[4] = response.sprites.front_shiny; 
        //3 Stats 5-11 
        //Speed 
        $scope.pokeArray[5] = response.stats[1].base_stat; 

        //Index 6 = Array of 6 
        $scope.pokeArray[6] = [ 
         { 
          speed : response.stats[0].base_stat, 
          spDefense: response.stats[1].base_stat, 
          spAttack : response.stats[2].base_stat, 
          defense : response.stats[3].base_stat, 
          attack : response.stats[4].base_stat, 
          hp  : response.stats[5].base_stat 
         }]; 

        console.log("Name: " + response.forms[0].name); 
        console.log("Height: "+ response.height); 
        console.log("ID: " + response.id); 
        console.log("Array: " + $scope.pokeArray); 
        console.log("speed: " + response.stats[1].base_stat); 
        console.log("Stat array: " + $scope.pokeArray[6].speed); 
       } 
      ); 
    } 

あなたが見ることができるように、私は私のコンソールログでそれをテストしていると私は私のHTMLビューで情報を使用していた、私の最初の5つのアレイは、すべての直接の応答を含むされており、これが正常に動作します。

現在、最後のコンソールログは "Stat array:undefined"を返します。たぶん、mutlidemensional配列の私の応答を行う必要があります別の方法theres異なるが、私は多分、私は[6] [0]を使用するようにしようとスピードを得ることを試みたと思う?しかし、これはエラーを引き起こす。

誰かが私の配列であるか、問題を引き起こしているJSONの処理であるかを教えてもらえれば、本当に私を助けてくれるでしょう。ありがとうございました。あなたは配列を作成の代わりに、オブジェクトを作成している

+1

は、我々は 'response'のシリアル化された値を見ることができますか? –

+1

オブジェクトを文字列に連結しようとしているため、 '[object Object] .'が表示されます。これが起こると、 'toString()'メソッドが呼び出され、あなたのオブジェクトはカスタムのtoStringメソッドを持たないので、オブジェクトタイプを文字列として与えるデフォルトのメソッドを使用します。 –

+0

@PatrickEvansしたがって、すべてのデータが文字列型の場合、ToString()は呼び出され、問題はないので、出力は[Object object]ではありませんか? – Tecwyn

答えて

5

、次の操作を行います。

$scope.pokeArray[6] = { 
    speed : response.stats[0].base_stat, 
    spDefense: response.stats[1].base_stat, 
    spAttack : response.stats[2].base_stat, 
    defense : response.stats[3].base_stat, 
    attack : response.stats[4].base_stat, 
    hp  : response.stats[5].base_stat 
}; 
+1

ニースキャッチ。ネストされた '['と '{'括弧は、単一のオブジェクトを含む配列を作成します。 –

+0

ありがとうございました@Amit、私はそれを見なければならない方法は、別の配列のインデックスに配列を作成するのではなく、1つのインデックス内に複数のオブジェクトを作成することです。 – Tecwyn

+1

@Tecwyn - あなたは何をすべきか分かりません。それはあなたの機能的な要求にかなっていますが、私はあなたが間違っていたことを知っています**。 – Amit

1

angular.module('app',[]).controller('ctrl',function($scope,$http){ 
 
$scope.pokeArray = new Array(11); 
 
     $http.get("http://pokeapi.co/api/v2/pokemon/charmander.json") 
 
      .success(function (response) 
 
       { 
 
        //Get first form FORMS array, assign name 
 
        $scope.pokeArray[0] = response.forms[0].name; 
 
        //13 ID 
 
        $scope.pokeArray[1] = response.id; 
 
        //10 Height 
 
        $scope.pokeArray[2] = response.height; 
 
        //7 Sprites 
 
        $scope.pokeArray[3] = response.sprites.front_default; 
 
        $scope.pokeArray[4] = response.sprites.front_shiny; 
 
        //3 Stats 5-11 
 
        //Speed 
 
        $scope.pokeArray[5] = response.stats[1].base_stat; 
 

 
        //Index 6 = Array of 6 
 
        $scope.pokeArray[6] = [ 
 
         { 
 
          speed : response.stats[0].base_stat, 
 
          spDefense: response.stats[1].base_stat, 
 
          spAttack : response.stats[2].base_stat, 
 
          defense : response.stats[3].base_stat, 
 
          attack : response.stats[4].base_stat, 
 
          hp  : response.stats[5].base_stat 
 
         }]; 
 

 
        console.log("Name: " + response.forms[0].name); 
 
        console.log("Height: "+ response.height); 
 
        console.log("ID: " + response.id); 
 
        console.log("Array: " + $scope.pokeArray); 
 
        console.log("speed: " + response.stats[1].base_stat); 
 
        console.log("Stat array: " + $scope.pokeArray[6][0].speed); 
 
       }); 
 

 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="ctrl"> 
 
{{pokeArray[6][0].speed}} 
 

 
</div>