2017-08-31 90 views
0

我正在尋找從REST端點返回數據以在按鈕按下時填充圖形。如果按鈕被按下兩次,那麼數據會翻倍,但是在這種情況下,我希望刪除舊數據並只顯示新數據。JavaScript數據數組的值翻倍

E.g. 在按下第一個按鈕,這是返回的數據:

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

在第二次按下按鈕,這是返回:

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

在這種情況下我也只是想在第二個按鈕按下下面的返回:

{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的調用中被重新填充兩次(甚至更多)。

...如果由於某種原因,您確實需要共享,請在重新填充之前清理它。例如:

.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