【问题标题】:add and remove items between arrays in angular [duplicate]在角度数组之间添加和删除项目[重复]
【发布时间】:2014-11-22 15:00:09
【问题描述】:

如何使用角度数组在两个数组之间添加和删除元素? 我有$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,等等......如果你有更具体的问题,请准备一个演示并向我们展示更多的代码,这些代码会引发更多的上下文.
  • 我不相信这是重复的,因为它的角度数组添加了 haskeys 和它们自己的 id,如下所述拼接重新索引数组。此外,我将查询 id 作为唯一性指标。
  • 在重复中使用 id 跟踪,您将不再关联 haskkey。

标签: javascript arrays angularjs


【解决方案1】:

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

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

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

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

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

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 2019-02-11
    • 2017-01-29
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多