javascript - 查找对象数组中是否存在值(Angularjs)

标签 javascript arrays angularjs object iteration

我很难把这件事做好。如果有人能帮助我找到解决方案,我会很高兴。

0: Object
   Name: Ria
   Age: 27
   Sex: Female

1: Object
   Name: Brian
   Age: 23
   Sex: Male

2: Object
   Name: Rick
   Age: 32
   Sex: Male

这是对象数组。我正在传递用户输入的值。例如我要求用户输入名称。输入后,我需要检查上面的对象数组,如果名称存在于对象数组中。

我使用 foreach、基本数组迭代尝试了各种解决方案,但找不到方法。

这是我上次尝试过的...

var result = false;

function search(nameKey, myArray) {
  for (var i = 0; i < myArray.length; i++) {
    if (myArray[i].Name === nameKey) {
      return true;
    }
  }
}

result = search($scope.data.name, checkdatabase);

在这里,checkdatabase是对象数组并且 $scope.data.name是用户输入的值。我期望结果的值为 true当用户存在于数据库中或结果为 false 时这是最初定义的。

最佳答案

您需要的是 Array.prototype.some :

result = myArray.some(function(user) { return user.name === $scope.data.name; });

顺便说一句,这只是一个建议:我将存储用户名索引并使用 Array.prototype.indexOf .

每当添加用户时,都可以将名称添加到数组中:

var userNameIndex = [];
var users = [];

users.push(user);
// I've called .toLowerCase() so the index isn't case sensitive
userNameIndex.push(user.Name.toLowerCase().trim());

...您可以检查用户是否已添加,如下所示:

// I've called .toLowerCase() to perform a case insensitive search
var result = userNameIndex.indexOf($scope.data.name.toLowerCase().trim()) > -1;

如果您检索大量用户,它的性能应该会更好。

I am expecting the value of result as true when user is present in database or else result as false which is defined initially.

是的,但请注意,调用 search 会再次设置变量 result。也就是说,最初的 false 永远不会被保留。

关于javascript - 查找对象数组中是否存在值(Angularjs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854902/

相关文章:

c - 我在将 char 变量的值附加到 C 中的字符串时遇到问题

javascript - 在 Angular 中按时间间隔更新 View 中的字段

angularjs - 在 AngularJS 中本地保存 session 有多安全?

javascript - 如何使用 jQuery 设置单个项目的回调

javascript - 如何使用 jQuery 将 ID 和标签标签添加到复选框

javascript - 当调用 'this' 的函数位于子对象的对象内部时,您将如何引用 'this'?

javascript - 为什么 JavaScript 代码无法在 codepen.io 中运行

python - Numpy 掩码数组 - 指示缺失值

javascript - 如何将数组元素拆分为 2 并返回剖开原始元素的新数组?

javascript - 在加载了 ngmap 的 map 上显示信息窗口