2017-08-31 6 views
0

RESTエンドポイントからデータを返して、ボタンを押すとグラフが表示されます。ボタンを2回押すとデータが2倍になりますが、この場合は古いデータを削除し、新しいデータのみを表示します。値が倍増するJavaScriptデータ配列

など。

{19455746: 56, 22254286: 166, 22255638: 272, 22808354: 68} 

私は2番目のボタンを押しに返さ次たいだけでしょう。この場合:これは返された第二ボタンを押してオン

{19455746: 28, 22254286: 83, 22255638: 136, 22808354: 34} 

:この最初のボタンを押してオン は、データが返されます。

{19455746: 28, 22254286: 83, 22255638: 136, 22808354: 34} 

ボタンを押してトリガすることを私のJavaScriptコードは以下の通りです、私は私の場合はより多くのコードを教えて、私は関連があると信じるものにこれを削減しようとしました):

$scope.getDateRangeRoom = function() { 
    $scope.data = null; 
    var obj = {}; 
    condata = null; 
    ... 
    $q.all(NexaService.getRoomDateRange(roomName, startDate, secondDate)) 
      .then(function (response) { 
       for (var x = 0; x < response.length; x++) { 
        conData.push(response[x].data); 
       } 
       $scope.loaded = true; 
       for (var x = 0; x < conData.length; x++) { 
        for (var i = 0, j = conData[x].length; i < j; i++) { 
         if (obj[conData[x][i].sensorUUID]) { 
          obj[conData[x][i].sensorUUID]++; 
         } else { 
          obj[conData[x][i].sensorUUID] = 1; 
         } 
        } 
       } 
       var sensorNameArray = Object.keys(obj); 
       var sensorDataArray = sensorNameArray.map(key => obj[key]); 
       $scope.data = sensorDataArray; 
       ... 
} 

以前のデータが削除され、新しいデータのみが返されることを確認するにはどうすればよいですか?

答えて

2

condata = null;var conData = []行に置き換えます。関数内でこの変数が必要なだけで、getDateRangeRoom()を呼び出すたびに別の空の配列にする必要があります。

この変数が現在作成されている場所は表示されませんでした。私の理解は、それがスコープの共有状態だということです。空の配列に変換しても、.then呼び出しで2回(またはそれ以上)再投入される可能性があります。

...何らかの理由で実際にこれを共有する場合は、再充填前に丁度清掃してください。例:実際には

.then(function (response) { 
    conData = []; 
    for (var x = 0; x < response.length; x++) { 
    conData.push(response[x].data); 
    } 
    // ... there goes the rest 

、あなたも、より簡潔に書くことができます。まだデータが倍増する原因になっている

conData = response.map(row => row.data); 
+0

を。 – Colin747

+0

アップデートを確認してください。 – raina77ow

+0

申し訳ありませんが、あなたの変更を追加したときに小文字の「D」がありました。今は期待どおりに働いています。ご協力いただきありがとうございます! – Colin747

関連する問題