我正在尝试在下面的给定数组中搜索userName。在搜索对象数组中的第二个元素时,Search函数为第二个元素返回true,其中在搜索第一个元素时,第一个元素返回false。当我们在Array中搜索现有值时它应该返回true,但该函数对第一个元素返回false,对于第二个元素返回true。 我无法找出我正在做的错误。甚至尝试过使用Array.prototype.find()函数,但没有运气。
//JSON User Information
var userProfiles = [
{
"personalInformation" : {
"userName" : "Chandu3245",
"firstName" : "Chandrasekar",
"secondName" : "Mittapalli",
"Gender" : "Male",
"email" : "chandxxxxx@gmail.com",
"phone" : ["740671xxx8", "8121xxxx74"]
}
},
{
"personalInformation" : {
"userName" : "KounBanega3245",
"firstName" : "KounBanega",
"secondName" : "Karodpati",
"Gender" : "Male",
"email" : "KounBanega3245@gmail.com",
"phone" : ["965781230", "8576123046"]
}
}
];
function findUserDataWithUserID (userData, userid){
var fullName = "";
//iterates through userData array
userData.forEach(function(user){
//checks for matching userid
if(user.personalInformation.userName === userid){
fullName=user.personalInformation.firstName+" "+user.personalInformation.secondName;
}else{
fullName = "Userid Not Found";
}
});
return fullName;
}
console.log(findUserDataWithUserID(userProfiles, "Chandu3245"));

答案 0 :(得分:0)
这是因为它在if
的第一次迭代中运行forEach
情况,然后在第二次迭代中,它处理数组中的第二项,导致else
要运行的条款。
更全面的方法是使用filter / map / reduce:
userProfiles
// Only keep the one that we want
.filter(function(user) {
return user.personalInformation.userName === userid;
})
// extract the user's name
.map(function(user) {
return user.personalInformation.firstName + " " + user.personalInformation.secondName;
})
// Get the first (and only) item out of the array
.pop();
这不能解决任何错误检查(例如,如果用户不在原始数组中)。
答案 1 :(得分:0)
您也可以使用Array.prototype.some()
方法。
some
方法类似于every
方法,但在函数返回为true之前有效。有关更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
function checkProfile (profiles,userid) {
var message = "Userid not found"
profiles.some(function(user) {
if(user.personalInformation.userName === userid) {
message = user.personalInformation.firstName+" "+user.personalInformation.secondName;
}
})
console.log(message);
};
checkProfile(userProfiles,"KounBanega3245");