Angularjs检查数组中是否存在传递值

Tre*_*vor 6 javascript angularjs angularjs-ng-repeat

我正在尝试使用AngularJS将两个文本字段值传递给数组,但我还想检查传递的第一个值是否已存在于数组中.如果确实如此,我不希望它再次添加,如果它不存在则添加值.我可以让它添加值,但我试图检查数组中是否已存在姓氏值.我找到了一些我试图遵循的例子,但我似乎无法让它们发挥作用.谢谢你的帮助!

<div class="panel-body">
    <div ng-controller="TodoCtrl">
        <ul>
            <li li ng-repeat="todo in todos">
            {{todo.text}}, {{todo.name}}
            </li>
        </ul>
        <form class="form-horizontal">
        <input type="text" ng-model="formTodoLast" ng-model-instant>
        <input type="text" ng-model="formTodoFirst" ng-model-instant>
        <button class="btn" ng-click="addTodo()"><i class="icon-plus"></i>Add</button>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

todo.js

function TodoCtrl($scope) { 
    $scope.todos = [];

    $scope.addTodo = function () {

    if($scope.todos.indexOf(text:$scope.formTodoLast) == -1) {
        $scope.todos.push({text:$scope.formTodoLast, name:$scope.formTodoFirst});
        $scope.formTodoText = ' ';
        $scope.formTodoName = ' ';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ise 15

正如Craig所说,你需要循环遍历数组

var addToArray=true;
for(var i=0;i<$scope.todos.length;i++){
    if($scope.todos[i].text===$scope.formTodoLast){
        addToArray=false;
    }
}
if(addToArray){
    $scope.todos.push({text:$scope.formTodoLast, name:$scope.formTodoFirst});
}
$scope.formTodoText = ' ';
$scope.formTodoName = ' ';
Run Code Online (Sandbox Code Playgroud)


小智 9

似乎您的代码段中存在语法错误.如果您更喜欢if语句中的一行版本,请将if条件更改为:

function TodoCtrl($scope) { 
    $scope.todos = [];

    $scope.addTodo = function () {

    if(!$scope.todos.some(function(td){return td.text===$scope.formTodoLast})) {
        $scope.todos.push({text:$scope.formTodoLast, name:$scope.formTodoFirst});
        $scope.formTodoText = ' ';
        $scope.formTodoName = ' ';
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

Array.prototype.some 如果任何元素满足要求,则返回true

some()为数组中的每个元素执行一次回调函数,直到找到一个回调返回true值的元素.如果找到这样的元素,some()会立即返回true. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some