检查对象数组中是否存在值

时间:2016-12-12 15:07:06

标签: javascript angularjs

鉴于此对象:Here is my working code

我需要检查访问者数组中是否已存在某些card_id。我该怎么办?我尝试了一个循环但是没有用,因为当我得到一个新的data.card_id并且访问者数组中已经有多个条目时它可能不匹配。

我的代码:

    $scope.$on("addMultiVisitor", function(evt, data) {

      $scope.newVisit.visitors.length + 1;
      $scope.newVisit.visitors.push({
        "access_route_id": "",
        "card_id": data.id,
        "identity_id": data.identity.id,
        "company_id": data.company.id,
        "company_name": data.company.name,
        "firstname": data.identity.given_names,
        "lastname": data.identity.surname,
        "birthdate": new Date(data.identity.birthdate)
      });
      window.scrollTo(0, document.body.scrollHeight);
      $scope.$apply();
  });

2 个答案:

答案 0 :(得分:5)

您可以使用Array.some方法:

var doesIdExist = $scope.newVisit.visitors.some(function(v) {
    return v.card_id === data.id;
});

如果数组中的任何内容与条件匹配,则结果为true,否则为false

答案 1 :(得分:0)

您可以使用indexOf()检查数组中是否已存在对象。

如果对象不在数组中,则返回-1:

$scope.o = {
    "access_route_id": "",
    "card_id": data.id,
    "identity_id": data.identity.id,
    "company_id": data.company.id,
    "company_name": data.company.name,
    "firstname": data.identity.given_names,
    "lastname": data.identity.surname,
    "birthdate": new Date(data.identity.birthdate)
}

if($scope.newVisit.visitors.indexOf(o) == -1) { // Not in the array
     $scope.newVisit.visitors.push(o);
}

但我猜 @tymeJV answer 更符合您的需求。