簡體   English   中英

Angularjs檢查數組中是否存在傳遞值

[英]Angularjs check if passing value exists in array

我正在嘗試使用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>

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 = ' ';
        }
    }
}

正如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 = ' ';

似乎您的代碼段中存在語法錯誤。 如果您更喜歡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 = ' ';
        }
    };
}

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

some()為數組中的每個元素執行一次回調函數,直到找到一個回調返回true值的元素。 如果找到這樣的元素,some()會立即返回true。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some

這個“$ scope.todos.indexOf(text:$ scope.formTodoLast)”將不起作用。 您必須遍歷數組並檢查每個對象的formTodoLast屬性。 或者,如果使用完整的jQuery,您可以使用grep()。

這是一個例子,注意比較現在是區分大小寫的。 如果它是一個很長的列表,考慮使用Javascript for循環而不是Angular的forEach ,你可以打破for循環,它可能更快。

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

    $scope.addTodo = function () {

        var missingName = true;
        angular.forEach($scope.todos, function(value, key){
           if(value.formTodoLast == $scope.formTodoLast)
           {
               missingName = false;
           }
         });

        if(missingName) {
            $scope.todos.push({text:$scope.formTodoLast, name:$scope.formTodoFirst});
            $scope.formTodoText = ' ';
            $scope.formTodoName = ' ';
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM