我正在根据以下数据类型构建一个图表: points =胰岛素:20,cho:30;我使用ng-重复循环遍历我的数组。我用指数作为x值,用胰岛素或cho作为y值。我希望索引为x值,因为稍后我将使用日期作为x值,如果日期发生在该日期,则希望显示cho/胰岛素值。值绑定到索引,因为它们需要在该时间段显示在svg中。
<line class="insulinLine" ng-repeat="point in points | limitTo :
points.length-1"
ng-x1="{{((width /points.length) * $index ) + (width/points.length)}}"
ng-y1="{{((point.insulin / maxY) * 400)}}"
ng-x2="{{((width / points.length) * ($index + 1)) + (width/points.length)}}"
ng-y2="{{((points[$index + 1].insulin / maxY) * 400)}}"/>我的问题发生在空值上,如果有一个空值,我希望ng-重复跳过y2的索引直到下一个非空值,以便该行连接到下一个实际值。
我尝试过的选择是:
您是否可以设置一个条件,在其中查找下一个非空值,然后使用该值并跳过该值的索引?
发布于 2018-03-28 16:44:19
计算javascript中的点数并构造一个新的数组就能做到这一点。然后循环遍历insulinLines和choLines数组来设置最后的行。代码链接:https://codepen.io/mbezema/pen/bvWPVm
function determineLines() {
var insulinStack = [];
var choStack = [];
for (var i = 0; i < $scope.points.length; i++) {
if($scope.points[i].insulin !== null){
console.log(i);
insulinStack.push({
xValue: i,
insulin: $scope.points[i].insulin
});
}
if($scope.points[i].cho !== null){
choStack.push({
xValue: i,
cho: $scope.points[i].cho
});
}
}
$scope.insulinLines = [];
$scope.choLines = [];
while (insulinStack.length){
$scope.insulinLines.push(insulinStack.pop());
}
while (choStack.length){
$scope.choLines.push(choStack.pop());
}
}发布于 2018-03-28 15:12:01
我会在控制器中做这个逻辑。有一个setPoints方法,每次您想更新点数组时,只需遍历该方法即可。类似于:
function ignoreNulls (array) {
let lastValue = null;
for (let i = array.length; i >= 0; i--) {
if (!array[i]) {
array[i] = lastValue;
}
else {
lastValue = array[i];
}
}
}我在这里要做的是在数组中倒退,检查是否有一个值。如果有-缓存它。如果没有最后一个缓存值,则改为。
https://stackoverflow.com/questions/49530136
复制相似问题