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

3

给定这个对象:http://kopy.io/H2CqY

我需要检查某个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个回答

5
您可以使用Array.some方法:
var doesIdExist = $scope.newVisit.visitors.some(function(v) {
    return v.card_id === data.id;
});

如果数组中的任何元素符合条件,结果将为true,否则为false


1
但请记住浏览器支持,'some' 是IE >= 9 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some - Paweł Kozikowski
@PawełKozikowski - 是的,我希望现在每个人都已经开始为>= IE9开发了。 - tymeJV

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的答案更适合您的需求。


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