2017-05-06 74 views
1

我開始學習angularjs(我是初學者,所以請善待)。搜索數組範圍內的每個索引內的特定字符串(angularjs)

我正在做一個民意調查應用程序,我使用的角度來做到這一點

我有一個名爲items一個陣列範圍其中包括所有將要加入到投票的項目。

$scope.items = [] 

我在做一個錯誤處理腳本,如果一個特定輪詢產品已經在items陣列,我不能做indexOf方法在數組中直接進行搜索,如果因爲一個項目已經存在這將通知用戶我的代碼會直接向數組中添加數字,如1. item1,2. item2,3. item3,所以我想搜索項目[]中的所有索引並在索引內執行indexOf方法,以查看項目是否已存在。

我有這樣的代碼據稱返回true如果一個項目已經存在的數組中,並會返回false否則:

//number of items in the array 
    var itemNum = $scope.items.length + 1; 
    //the item which the user entered 
    var toBeAdded = $scope.pollItem; 

    //try to search the items[] array if an item already exists 
    var findItem = function(){ 
     for (var i = 0; i < itemNum-1; i++) { 
      if ($scope.items[i].indexOf(toBeAdded) >= 0) { 
       return true 
      }else{ 
       return false 
      } 
     } 
    } 

    //add the item into the poll if findItem() function returns false 
    if (!findItem) { 
     $scope.items.push(itemNum.toString() + " " + toBeAdded); 
     $scope.pollItem = ""; 
     focus('pollItem'); 
    }else{ 
     alert('item already exists') 
    } 

而是它總是返回「真」(即使我的項目數組是空的)。我不知道我做錯了什麼。請幫忙。

謝謝任何​​能夠幫助我的人。

回答

1

當你定義由var findItem = function() {...}一個功能,你必須findItem()調用它,要不然也不會被執行,因爲findItem不爲空,那麼!findItem將永遠是false因爲findItem是由JavaScript公認variable

so change if (!findItem) to if (!findItem())將解決您的問題。

請參閱下面的代碼片段。

var items = []; 
 
var toBeAdded = { 
 
    test: 'test' 
 
}; 
 
var findItem = function() { 
 
    for (var i = 0; i < items.length - 1; i++) { 
 
    if (items[i].indexOf(toBeAdded) >= 0) { 
 
     return true 
 
    } else { 
 
     return false 
 
    } 
 
    } 
 
} 
 

 
if (!findItem()) { 
 
    items.push(toBeAdded); 
 
} else { 
 
    alert('item already exists'); 
 
} 
 
console.log(items);

+0

我覺得愚蠢丟失了這一點。順便謝謝你的回答! –

+0

是的,當然!再次感謝! –