我正在编辑一组对象。
此数组因用户选择而异,但通常如下所示:
[{boxID:0,name:"Apple Bread",weight:2}]
此数组声明为$scope.boxes
在高级别,此数组源自之前调用的函数,其重点是按重量将项目(例如Apple Bread)打包到框中,没有框超过总重量(在这种情况下) 6磅。因此,该数组填充了表示项目,其权重以及打包的boxID(0是第一个框)的对象。
我的问题是,我正在插入功能以让用户编辑该框,以便他们可以随机播放并自定义其框,同时仍然尊重总重量限制。
为了结束,我有一个功能,利用拖放功能让用户编辑和移动他们的框周围的项目。一旦完成,我需要验证哪个项目属于哪里。但我甚至无法使ondragstart
功能正常工作。想法是ondragstart
从数组中删除有问题的项目,然后重新计算所有框,通过以下内容:
$scope.boxyboxybox2 = function() {
$scope.displayBoxes = [];
for (var i = 0; i < $scope.boxes.length; i++) {
if (i == 0) {
$scope.displayBoxes.push({
box: $scope.boxes[i].boxID,
contents: [{
name: $scope.boxes[i].name,
weight: $scope.boxes[i].weight
}]
});
console.log($scope.displayBoxes);
continue;
}
for (var z = 0; z < $scope.displayBoxes.length; z++) {
if ($scope.boxes[i].boxID == $scope.displayBoxes[z].box) {
$scope.displayBoxes[z].contents.push({
name: $scope.boxes[i].name,
weight: $scope.boxes[i].weight
})
console.log($scope.boxes[i].boxID, $scope.displayBoxes[z].box, $scope.displayBoxes);
} else {
$scope.displayBoxes.push({
box: $scope.boxes[i].boxID,
contents: [{
name: $scope.boxes[i].name,
weight: $scope.boxes[i].weight
}]
});
console.log($scope.displayBoxes);
break;
}
}
}
console.log($scope.displayBoxes);
}
以上不起作用,我没有正确使用breaks
或其他东西,因为这种变化要么得到一个无限循环,要么我有一个对象数组(在displayBoxes
中这是什么回到DOM)我有重复的地方,就像我有Box 3的多个实例一样,没有明显的理由。
很难搞清楚这一点。如果有必要的话,我可以做一名傻瓜,但我希望这只是一个很小的疏忽,因为我非常接近我的预期结果。
编辑:请求的Plunker:https://plnkr.co/edit/Bq6rgeOx26QTTu8d7AXh?p=preview
答案 0 :(得分:0)
答案是硬代码z
小于displayBoxes
数组的长度。
for (var z = $scope.displayBoxes.length-1; z < $scope.displayBoxes.length; z++) {
这使break;
在保持所需功能的同时生效。