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

Find if values exists in an array of object (Angularjs)

本文关键字:是否 存在 Angularjs 对象 数组 查找      更新时间:2023-09-26

我很难做到这一点。如果有人能帮助我解决这个问题,我会很高兴。

0: Object
   Name: Ria
   Age: 27
   Sex: Female
1: Object
   Name: Brian
   Age: 23
   Sex: Male
2: Object
   Name: Rick
   Age: 32
   Sex: Male

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

尝试了使用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;

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

我希望当用户出现在 数据库或否则结果为最初定义的 false。

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

为了扩展 Matias 的答案,只要您不需要与您的谓词匹配的项目,some 就非常适合这项工作。 some接受上下文作为第二个参数:

result = myArray.some(function(user) { 
  return user.name === this.name; 
}, $scope.data); //pass $scope.data as this

如果要跟踪与谓词匹配的项,则有以下几种选择:创建索引对象或使用forEachwhile遍历数组

var index = myArray.map(function(item) { 
  return item.name;          
}).indexOf(nameKey);
var item = myArray[index];
var l = myArray.length;
var found = false;
while(!found && l--) {
  found = myArray[l].name === nameKey;
}
var item = myArray[l];

使用 lodash.js.您可以使用给定参数过滤数组。

例如:

var givenJson ={ Name: Ria,Age: 27,Sex: Female};// this is the whole array
var response= _.filter(givenJson, function(data){ 
   return data.name == "Ria";
}); 
if(response != null && response != undefined){
  return true;
}