我很难把这件事做好。如果有人能帮助我找到解决方案,我会很高兴。
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/