检查数组中是否存在值(AngularJS)

时间:2015-09-16 13:39:38

标签: javascript arrays angularjs object angularjs-controller

目前我正在使用forEach() - angular方法来检查对象数组的新值。但这是错误的方法,因为例如在列表中有20个对象。当我用现有文章创建一个对象时,forEach中的if语句告诉一次该文章存在,19次它不是。

以下代码:

var list = [];

articlelist.forEach(function (val) {
   list.push(val.artNr);
});

$log.info(list);

articlelist包含所有20个对象。为了比较,我只需要artNr。因为当用户创建新文章时,应该是if-Statement来检查添加的artNr是否已经存在。

$scope.createItem = function (createItem) {
  if(list.artNr === createItem.artNr) {
      $scope.message = 'artNr already exists!';
  }
...
};

问题是,list.artNr返回我" undefined"因为list变量是一个数组:

  

在console =>中列出输出Array ["AB001", "AB002", "AB003", "AB004"]

     

createItem output:=> Object { artNr: "AB001", description: "New Article" ...}

如何将新创建的对象与列表变量中的数组进行比较?

3 个答案:

答案 0 :(得分:112)

您可以使用indexOf功能。

if(list.indexOf(createItem.artNr) !== -1) {
  $scope.message = 'artNr already exists!';
}

有关indexOf的更多信息:

答案 1 :(得分:19)

您可以使用 indexOf()。像:

var Color = ["blue", "black", "brown", "gold"];
var a = Color.indexOf("brown");
alert(a);

indexOf() 方法在数组中搜索指定的项目,并返回其位置。如果找不到该项,则返回 -1

如果您想从头到尾搜索,请使用 lastIndexOf()方法:

    var Color = ["blue", "black", "brown", "gold"];
    var a = Color.lastIndexOf("brown");
    alert(a);

搜索将从指定的位置开始,如果没有指定开始位置,则从最后开始,并在数组的开头结束搜索。

如果找不到该项,则返回 -1

答案 2 :(得分:1)

你可以使用这样的东西......

  function (field,value) {

         var newItemOrder= value;
          // Make sure user hasnt already added this item
        angular.forEach(arr, function(item) {
            if (newItemOrder == item.value) {
                arr.splice(arr.pop(item));

            } });

        submitFields.push({"field":field,"value":value});
    };