刚开始学习JavaScript并尝试找出迭代数组以模拟登录过程的正确方法。
function validateLogin() {
var userdata = {
"users": [{
"username": "james",
"password": "pass1"
}, {
"username": "russel",
"password": "pass2"
}, {
"username": "jane",
"password": "pass3"
}, {
"username": "jeff",
"password": "pass4"
}]
};
var uname = document.getElementById("username");
var pword = document.getElementById("password");
var user = userdata.users;
for (var item in user) {
if (user[item].username == uname && user[item].password == pword) {
alert("Correct Username and Password")
} else {
alert("Incorrect Username or Password");
}
}
}
问题是它存储了所有数据" user [item] .username"当它意味着存储数组的一部分说[0]然后检查是否" uname"和" pword"是否相同,如果不进行,如果不是,验证细节不正确。
我确定打算做一些像count = user [item] .username;然后将++计算到下一次迭代?
无论哪种方式,我都没有得到它!任何人都可以帮忙吗?
答案 0 :(得分:0)
你的循环很好;我怀疑你的代码的真正问题,正如@squint所提到的,你是在将字符串与DOM元素进行比较,而不是与这些元素中包含的值(可能)进行比较。
但是,有几种方法可以改善你的循环。首先,你提到你不希望循环继续,如果它找到了它正在寻找的东西。您可以使用break
statement:
for (var item in users) {
if (users[item].username == uname && users[item].password == pword) {
break;
}
}
当然,这只是让你走出循环,但没有记录有关你如何摆脱循环的任何信息。为此,您可以考虑初始化变量以保存user
对象,并在循环外引用它(请注意,此处,我已将userdata.users
保存在名为users
的变量中,而不是{ {1}},因为这听起来更好,并允许我们使用user
来存储我们正在寻找的实际个人用户:
user
另请注意,JavaScript for .. in
statement在很多方面都不是迭代数组的理想方式。如果可以的话,最好使用全新的for .. of
statement,以及使用全新的Array.find
。如果不是 var users = userdata.users;
var user;
for (var item in users) {
if (users[item].username == uname && users[item].password == pword) {
user = users[item];
break;
}
}
if (user) {
console.log("Welcome " + user.username);
} else {
console.log("Invalid username or password");
}
循环:
for
最后,如果您想真正想要使用ES6(最新的稳定版JavaScript),您可以使用全新的boto3.Bucket.upload_file方法:
var users = userdata.users;
var user;
for (var i = 0; i < users.length; i++) {
if (users[i].username == uname && users[i].password == pword) {
user = users[i];
break;
}
}
if (user) {
console.log("Welcome " + user.username);
} else {
console.log("Invalid username or password");
}
var user = userdata.users.find(function (user) {
return user.username === uname && user.password === pword;
});
&#13;
function validateLogin() {
var userdata = {
"users": [
{"username": "james", "password": "pass1"},
{"username": "russel", "password": "pass2"},
{"username": "jane", "password": "pass3"},
{"username": "jeff", "password": "pass4"}
]
};
var uname = document.getElementById("username").value;
var pword = document.getElementById("password").value;
var users = userdata.users;
var user;
for (var i = 0; i < users.length; i++) {
if (users[i].username == uname && users[i].password == pword) {
user = users[i];
break;
}
}
if (user) {
console.log("Welcome " + user.username);
} else {
console.log("Invalid username or password");
}
return false;
}
&#13;
答案 1 :(得分:0)
在javascript中搜索until
循环示例时,嘿遇到了这个问题...那里没有运气但我在jsconsole上测试了你可能喜欢的while
循环选项
var arr = ['first']; arr.push('second', 'third'); var i = 0; while (i < arr.length){ console.log(arr[i]); i++; };
#!/usr/bin/env node
// Assign first word/line/character into array type variable
var arr = ['first'];
// Push further values into array setup above
arr.push('second', 'third');
// Assign index for array to start point
var i = 0;
// Start while loop and continue while index value is less then array total length
while (i < arr.length){
// Present currently processed array indexed value
console.log(arr[i]);
// Place more processing lines here
// Add one to index variable for array before allowing loop to exit or parse the next index
i++;
};
// close while loop
在上面的任何一个中,输出应该是相同的...看起来已经有很多if
检查的例子所以选择你想要投入到上面的周围的测试。
答案 2 :(得分:-1)
使用错误的循环
var usr;
for(var i=0; i<userdata.users.length; i++){
usr = userdata.users[i];
// do your stuff with usr
}
或:
userdata.users.forEach(function(usr, index, allUsers){
// do your stuff with usr
});