2014-09-27 57 views
4

使用角阵我如何在两个阵列之间添加和移除元素? 我有$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. 
     }; 
    }); 

此外,如果我做了第二次搜索,并试图从第一阵列添加相同成员到我的第二阵列(已经有这个用户)如何防止将重复到第二阵列(名单)? enter image description here

下面是我想在数组之间传输的对象的一个​​示例。 id字段是唯一性的指标。

+0

你可以看看数组操作,推,流行音乐,剪接,一些等等......如果你有更具体的问题,请准备一个演示,向我们展示更多的代码会抛出更多的上下文。 – PSL 2014-09-27 21:48:21

+0

我不认为这是重复的,因为它的角度数组添加了haskeys和他们自己的id,并且如下所述拼接重新编制了数组。另外我有id的查询作为唯一性的指标。 – Tim 2014-09-27 22:08:54

+0

在你的重复中使用id跟踪,你将不会有haskkey关联了。 – PSL 2014-09-27 22:12:23

回答

3

您可以获取index作为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); 
    }; 
} 

谢谢。