关于javascript:检查数组中是否存在值(angularjs)

Check if value exists in the array (AngularJS)

本问题已经有最佳答案,请猛点这里访问。

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

以下代码:

1
2
3
4
5
6
7
var list = [];

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

$log.info(list);

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

1
2
3
4
5
6
$scope.createItem = function (createItem) {
  if(list.artNr === createItem.artNr) {
      $scope.message = 'artNr already exists!';
  }
...
};

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

list output in console => Array ["AB001","AB002","AB003","AB004"],

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

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


您可以使用indexOf函数。

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

更多关于索引:

  • HTTP://www. W3Chans.COM/JSRef/JSReFixEndioFo.Aray.ASP.ASP
  • https://developer.mozilla.org/en/docs/web/javascript/reference/global_objects/string/indexof


可以使用indexof()。像:

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

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

如果要从头到尾搜索,请使用lastindexof()方法:

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

搜索将从指定的位置开始,如果未指定起始位置,则从结尾开始,并在数组的开头结束搜索。

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


你可以用这样的东西……

1
2
3
4
5
6
7
8
9
10
11
12
  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});
    };