2017-09-07 9 views
1

私はAngularJSのために新しく、各ループのネストされた角度の内部で関数のパラメータ値にアクセスしようとしていますが、その変数は未定義のエラーを取得します。ここに私のコードです。各ループのネストされたAngularJS内の関数パラメータ値にアクセスする方法は?

var pieChart = function (_data, _fieldName) { 
     var data = _data; 
     var cost_max = 0; 
     var cost_min = 99999; 

     angular.forEach(groupBy($scope.api_data, _fieldName), function (obj, index) { 
      var total = 0; 
      var name = ''; 
      angular.forEach(obj, function (row, i) { 
       name = row._fieldName; 
       total += 1; 
      }) 
      data.push([name, total]); 
      if (cost_max < obj.cost) cost_max = obj.cost; 
      if (cost_min > obj.cost) cost_min = obj.cost; 
     }) 
     $scope.chart.data = data; 
     $scope.loaded = 1; 
    } 

row._fieldNameはここでは定義されていませんが、問題は何ですか?親切に私を助けてください。あなたの二angular.forEachループでは

var groupBy = function (xs, key) { 
     return xs.reduce(function (rv, x) { 
      (rv[x[key]] = rv[x[key]] || []).push(x); 
      return rv; 
     }, {}); 
    }; 
+0

上部にあなたの機能の権利はあまりにも変数_fieldNameを持って、そしてあなたのforEachが_fieldNameという名前の変数を持って、これらはおそらくあなたがしたいプロパティ(row._fieldName)に干渉されるだろうか?それらのすべてにユニークな名前を付けてみてください。また、console.log()はどのobjであるか、期待する構造体/プロパティを保持しているかどうかを確認してください。 – rrd

+0

関数groupByが配列の配列を返していない可能性があります。配列の配列を返す予定がない場合は、ロジックをチェックします。あなたがまだ助けを必要とするならば、グループを投稿してください。 – Abhi

答えて

1

、あなたはrow[_fieldName]row._fieldNameを交換する必要があります。 row._fieldNameを書き込むことにより

angular.forEach(obj, function (row, i) { 
    name = row[_fieldName]; 
    total += 1; 
}) 

、あなたの代わりに実際のフィールドのオブジェクトrowから_fieldNameという名前のキーを取得しよう。

Little JSFiddle

+0

ありがとう、あなたは私の時間を節約する – user3090790

関連する問題