在Angular中添加和删除数组项

10

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

    angular.forEach($scope.results, function (item) {
        if (item.selected) {
            $scope.list.push(item);
            //CODE TO REMOVE item from $scope.results here.
        };
    });
此外,如果我进行第二次搜索并尝试将第一个数组中的同一成员添加到我的第二个数组(已经有这个用户),如何防止在第二个数组(列表)中添加重复项?
下面是我想在数组之间传输的对象示例。 id字段是唯一性的指标。

你可以查看数组操作,如push、pop、splice、some等。如果您有更具体的问题,请准备一个演示,并展示更多代码以提供更多上下文。 - PSL
我不认为这是重复的,因为它涉及到 Angular 数组,其中添加了 haskeys 和它们自己的 id,并且如下所述,splice 重新索引了数组。此外,我还有一个 id 的查询作为唯一性指标。 - Tim
在您的重复中使用“track by id”,您将不再有关联的哈希键。 - PSL
1个回答

4
你可以在angular.forEach中获取索引作为第二个参数。然后使用splice从原始数组中删除该项。请查看下面的代码。
            angular.forEach($scope.results, function (item, index) {
                if (item.selected) {
                    $scope.list.push(item);
                    $scope.results.splice(index, 1);
                };
            });

我刚刚意识到在angular.forEach循环中使用splice存在一个缺陷,即在删除项后会重新索引数组。因此,如果删除了一项,则会跳过紧接着的下一项。

因此,以下将是正确的解决方案。

var len = $scope.results.length;
while (len--) {
    var item = $scope.results[len];
    if (item.selected) {
       $scope.list.push(item);
       $scope.results.splice(len, 1);
    };
}

谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接