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

70

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

以下代码:

var list = [];

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

$log.info(list);

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

$scope.createItem = function (createItem) {
  if(list.artNr === createItem.artNr) {
      $scope.message = 'artNr already exists!';
  }
...
};
问题是,由于list变量是一个数组,所以list.artNr返回“undefined”:

控制台中的列表输出 => Array ["AB001", "AB002", "AB003", "AB004"]

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

如何将新创建的对象与来自list变量的数组进行比较?

indexOf method didn't work for me as I was using json object array retrieved from the local storage. After trying many different methods, I have decided to use $filter provider available in AngularJS.var articlelist = [ {id: 1, title: 'Title1'}, {id: 2, title: 'Title2'}, {id: 3, title: 'Title3'} ] var o = $filter('filter')(articlelist, { 'id': new_title.id }, true); if (o.length == 0) { articlelist .push(new_article); } - Manoj De Mel
3个回答

145

谢谢..我忘记了indexOf()方法! - yuro
这是一个简单清晰的函数,几乎所有浏览器都支持。只有非常旧版本的Firefox和IE不支持它。 - Aryan Firouzian
我也忘记了这个函数,这里有一个简单而棒的答案。 - cklimowski

32

您可以使用 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


感谢Muhammed清晰的分享。 - MahmutKarali

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});
    };

3
这种做法很糟糕... 想象一下一个包含重复记录的小型列表,共100个记录。对于每条记录,您都需要循环遍历已添加的记录。 - curiousBoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接