如果不在数组中,则将项添加到数组

时间:2015-07-09 19:28:41

标签: javascript arrays angularjs

每次单击“添加项目”按钮时,它会重复将item添加到items数组。例如,如果我单击“添加项目”五次,则数组为:

items: [item, item, item, item, item]

如何修改我的代码以添加第一个item但不向数组添加额外的item,如下所示:

items: [item]

我尝试将var i = -1替换为var i = 0,但绝不会将item添加到items数组。

以下是我的观点:

<body ng-controller="MainCtrl">
  <button ng-click="addItem()">Add {{item}}</button>
  <p>items: {{items | json}}</p>
</body>

...和控制器:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.item = 'item';
  $scope.items = [];
  $scope.addItem = function () {
    for (var i = -1; i < $scope.items.length; i++) {
        if ($scope.items[i] != $scope.item) {
          $scope.items.push($scope.item);
        }
    }
  };
});

这是我的Plunker: http://plnkr.co/edit/OT900pXEcxGgkpJZna2x?p=preview

2 个答案:

答案 0 :(得分:3)

添加简单验证

addItem()中,使用indexOf添加简单验证,以检查项目是否在数组中:

$scope.addItem = function () {

    if ($scope.items.indexOf($scope.item) != -1){
      // The item is already in the array, abort!
      return;
    }

    $scope.items.push($scope.item);
}

http://plnkr.co/edit/GKtREKBXUD7J54oxTaDq?p=preview

答案 1 :(得分:3)

Here's a forked version of your plunkr.

它使用indexOf,这是一个内置函数来判断数组是否包含元素(当找不到项时它返回-1):

$scope.addItem = function () {
  if($scope.items.indexOf($scope.item) === -1){
      $scope.items.push($scope.item);
  }
};

我不确定你想通过引用$scope.items[-1]来实现什么,需要精心制作?