mor*_*pdx 14 javascript arrays angularjs
我有两个数组,称为'对象'和'appliedObjects'.我试图用Javascript和/或Angular中的优雅方式将对象从一个数组移动到另一个数组.
最初我做了这样的事情:
$scope.remove = function () {
angular.forEach($scope.appliedObjects, function (element, index) {
if (element.selected) {
element.selected = false;
$scope.objects.push(element);
$scope.appliedObjects.splice(index, 1);
}
});
}
$scope.add= function () {
angular.forEach($scope.objects, function (element, index) {
if (element.selected) {
element.selected = false;
$scope.appliedObjects.push(element);
$scope.objects.splice(index, 1);
}
});
}
Run Code Online (Sandbox Code Playgroud)
但后来我意识到,当从循环数组中删除值时,它不会添加或删除所有其他项,因为它是通过索引进行的.
然后我尝试使用临时数组来保存要添加或删除的项目列表,我开始得到奇怪的参考问题.
我开始关注这个问题的最佳解决方案......任何帮助和/或指导都会非常感激.
Art*_*tem 12
function moveElements(source, target, moveCheck) {
for (var i = 0; i < source.length; i++) {
var element = source[i];
if (moveCheck(element)) {
source.splice(i, 1);
target.push(element);
i--;
}
}
}
function selectionMoveCheck(element) {
if (element.selected) {
element.selected = false;
return true;
}
}
$scope.remove = function () {
moveElements($scope.appliedObjects, $scope.objects, selectionMoveCheck);
}
$scope.add = function () {
moveElements($scope.objects, $scope.appliedObjects, selectionMoveCheck);
}
Run Code Online (Sandbox Code Playgroud)
当一个构造自动执行太多时(比如forEach,或者甚至是for循环,在这种情况下),使用一个更原始的构造,允许你说清楚应该发生什么,而不需要解决构造.使用while循环,您可以表达需要执行的操作,而无需使用备份或以其他方式应用变通方法:
function moveSelected(src, dest) {
var i = 0;
while ( i < src.length ) {
var item = src[i];
if (item.selected) {
src.splice(i,1);
dest.push(item);
}
else i++;
}
}
Run Code Online (Sandbox Code Playgroud)