关于javascript:在数组之间以角度添加和删除项

add and remove items between arrays in angular

本问题已经有最佳答案,请猛点这里访问。

使用角度数组,如何在两个数组之间添加和删除元素?我有$scope.results$scope.list。结果数组是对webapi调用的结果,我允许用户选择要添加到第二个数组中的元素。如何从第一个添加到第二个,同时从第一个删除?

1
2
3
4
5
6
    angular.forEach($scope.results, function (item) {
        if (item.selected) {
            $scope.list.push(item);
            //CODE TO REMOVE item from $scope.results here.
        };
    });

另外,如果我进行了第二次搜索并尝试将同一成员从第一个数组添加到第二个数组(已经有此用户),如何防止向第二个数组(列表)添加重复项?enter image description here

下面是我想要在数组之间传输的对象的示例。ID字段是唯一性的指示器。


可以将索引作为angular.foreach的第二个参数。然后我们拼接以从原始数组中移除该项。检查下面的代码。

1
2
3
4
5
6
            angular.forEach($scope.results, function (item, index) {
                if (item.selected) {
                    $scope.list.push(item);
                    $scope.results.splice(index, 1);
                };
            });

我刚刚意识到在angular.foreach循环中使用拼接有一个缺点,即它将在移除项后重新索引数组。因此,如果删除某个项,则将跳过下一个项。

所以下面是正确的解决方案。

1
2
3
4
5
6
7
8
var len = $scope.results.length;
while (len--) {
    var item = $scope.results[len];
    if (item.selected) {
       $scope.list.push(item);
       $scope.results.splice(len, 1);
    };
}

谢谢。