在数组范围(AngularJS)中的每个索引中搜索一个特定的字符串



我开始学习angularjs(我是初学者,所以请友善(。

我正在制作一个民意调查应用程序,我正在使用Angular来执行此操作

我有一个名为items的数组范围,它包括将添加到民意调查的所有项目。

$scope.items = []

我正在制作一个错误处理脚本,该脚本将告知用户是否已经在items数组中,并且我无法直接在数组中进行indexOf方法以搜索是否已经存在,因为我的代码已经存在将数字直接添加到数组中,例如1. item12. item23. item3,因此我想搜索项目[]中的所有索引,并在索引中执行indexOf方法,以查看是否已经存在项目。

我有此代码,如果数组中的一个项目已经存在,并且将返回 false,否则将返回true,否则:

    //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')
    }

,但它总是返回" true"(即使我的项目数组为空(。我不知道我在做什么错。请帮助。

谢谢您可以帮助我的任何人。

当您通过var findItem = function() {...}定义函数时,您必须通过findItem()调用它,否则它不会执行,并且由于findItem不是null,因此!findItem始终为false,因为findItem被JavaScript识别为variable

因此,将if (!findItem)更改为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);

最新更新