2015-07-09 2 views
1

Каждый раз, когда я нажимаю кнопку «Добавить элемент», он повторно добавляет item в массив items. Например, если я нажимаю «Добавить элемент» в пять раз массив:Добавить элемент в массив, если он не находится в массиве

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

Как я могу изменить мой код, чтобы добавить первый item, но не добавлять дополнительные item S в массив, например, так:

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

+0

Вы пробовали, если $ scope.items.indexOf ($ scope.item)! = -1 чем push item в массиве? – immirza

+0

Вы хотите только «нажимать» один раз (в первый раз)? – Amit

+0

Каково ваше обоснование использования '$ scope.items [i]', когда 'i' равно -1? Что это должно достичь? – doldt

ответ

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

+0

Perfect - спасибо! – Ryan

3

Here's a forked version of your plunkr.

Он использует indexOf, которая является встроенной функцией, чтобы сказать, содержит ли массив в elment или нет (он возвращает -1, когда элемент не найден):

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

Я не уверен, что вы пытались достичь ieve путем ссылки $scope.items[-1], заботиться о том, чтобы разработать?