我希望从REST端点返回数据,以便在按下按钮时填充图形。如果按下按钮两次,则数据加倍,但是,在这种情况下,我希望删除旧数据,只显示新数据。
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;
...
}
如何确保删除以前的数据并仅返回新数据?
答案 0 :(得分: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);