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

时间:2016-03-07 21:59:00

标签: 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

这是对象数组。我正在传递用户输入的值。例如我要求用户输入名称。输入后,如果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

3 个答案:

答案 0 :(得分:1)

您需要的是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;

如果您要检索大量用户,它应该会表现得更好。

  

当用户出现时,我希望结果的值为true   数据库或结果为false,最初定义。

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

答案 1 :(得分:0)

扩展Matias&#39;回答,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];

答案 2 :(得分:0)

使用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;
}