虽然搜索值存在于数组中,但JavaScript函数返回else语句

时间:2017-08-03 01:50:49

标签: javascript

我正在尝试在下面的给定数组中搜索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"));




2 个答案:

答案 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");