所以,我认为这应该很容易,但我已经研究了几个小时,但无法找到解决方案。
我创建了一个注册;注册按钮有一个函数,它获取电子邮件地址的值并在所有对象上运行 for 循环以检查该值是否已存在。如果它存在,它应该说“你已经有一个帐户”并停止,如果它不存在,它应该继续并将数组插入对象中。
但是,它目前会检查每个数组元素,而不是仅检查键入的值。
代码如下:
let usersObj = [
{
firstName: "James",
age: 22,
username: "James@gmail.com",
password: "codity"
},
{
firstName: "Ellen",
age: 32,
username: "Ellen@gmail.com",
password: "laura"
},
{
firstName: "Lynn",
age: 16,
username: "Lynn@gmail.com",
password: "chicken"
},
];
$('#signUpSubmitBtn').on('click', function() {
getUserSignUpData();
})
;
function getUserSignUpData() {
let signUserName = $('#signUserName').val()
let signUserAge = $('#signUserAge').val()
let signUserEmail = $('#signUserEmail').val()
let signUserPassword = $('#signUserPassword').val()
for(i = 0; i < usersObj.length; i++) {
if(signUserEmail == usersObj[i].username) {
console.log('You already have an account!')
} else{
usersObj.push(
{firstName: signUserName, age: signUserAge, username: signUserEmail, password: signUserPassword});
console.log(usersObj);
}
// A $( document ).ready() block.
$( document ).ready(function() {
console.log( "ready!" );
let usersObj = [
{
firstName: "James",
age: 22,
username: "James@gmail.com",
password: "codity"
},
{
firstName: "Ellen",
age: 32,
username: "Ellen@gmail.com",
password: "laura"
},
{
firstName: "Lynn",
age: 16,
username: "Lynn@gmail.com",
password: "chicken"
},
];
console.log(usersObj)
// Log in
$('#loginSubmitBtn').on('click', function() {
getUserLogin();
});
function getUserLogin() {
let username = $('#userEmail').val()
let password = $('#userPassword').val()
for(i = 0; i < usersObj.length; i++) {
if(username == usersObj[i].username && password == usersObj[i].password) {
console.log("Hi " + usersObj[i].firstName + ',' + ' You have succesfully logged in!');
return
} else if(username == usersObj[i].username && password !== usersObj[i].password) {
console.log('Invalid user information');
$('#loginErrorText').text('Invalid user information');
return
};
}
console.log("You don't have an account.");
$('#loginErrorText').text("You don't have an account.");
};
// END Log in
// Sign Up
$('#signUpSubmitBtn').on('click', function() {
getUserSignUpData();
});
function getUserSignUpData() {
let signUserName = $('#signUserName').val()
let signUserAge = $('#signUserAge').val()
let signUserEmail = $('#signUserEmail').val()
let signUserPassword = $('#signUserPassword').val()
for(i = 0; i < usersObj.length; i++) {
if(signUserEmail == usersObj[i].username) {
console.log('You already have an account!');
} else{
usersObj.push(
{firstName: signUserName, age: signUserAge, username: signUserEmail, password: signUserPassword});
console.log(usersObj)
};
} ;
};
// console.log('You already have an account!');
// $('#existingEmailWarningText').text('Account already exists!')
// Show / Hide Forms
logInForm
signupForm
// Btn:
loginRef
signupRef
$('#logInForm').hide();
$('#loginRef').on('click', function() {
$('#logInForm').show();
$('#signupForm').hide();
});
$('#signupRef').on('click', function() {
$('#logInForm').hide();
$('#signupForm').show();
});
// The END
});
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
crossorigin="anonymous">
<!-- Link to style.css sheet -->
<link rel="stylesheet" href="style.css">
<title>Hello, world!</title>
</head>
<body>
<section class="mt-4">
<div class="container">
<div class="jumbotron">
<div>
<h3 class="text-primary">
Login
</h3>
</div>
</div>
</div>
</section>
<section class="text-center">
<div class="container">
<!-- ROW 1 -->
<div class="row">
<!-- COL 1 -->
<div class="col">
</div>
<!-- COL 2 -->
<div class="col">
<div id="logInForm">
<h3>Log in</h3>
<hr>
<form action="">
<!-- User Email -->
<div class="form-group">
<label for="userEmail">Your email</label>
<input id="userEmail" class="form-control" type="email">
</div>
<!-- User Password -->
<div class="form-group">
<label for="userPassword">Your password</label>
<input id="userPassword" class="form-control" type="password">
</div>
<!-- Login button -->
<div class="form-group">
<button type="button" id="loginSubmitBtn" class="btn btn-primary form-control">Login</button>
</div>
<span class="text-danger mt-1" id=""><small id="loginErrorText"></small></span>
<small class="d-block">No account? <a id="signupRef" href="#">Signup Now</a></small>
</form>
</div>
</div>
<!-- COL 3 -->
<div class="col">
</div>
</div>
<!-- ROW 2 -->
<div class="row">
<!-- COL 1 -->
<div class="col">
</div>
<!-- COL 2 -->
<div class="col">
<div id="signupForm">
<h3>Sign up</h3>
<hr>
<form action="">
<!-- User name -->
<div class="form-group">
<label for="signUserName">Your name</label>
<input id="signUserName" class="form-control" type="text">
</div>
<!-- User age -->
<div class="form-group">
<label for="signUserAge">Your birth date</label>
<input id="signUserAge" class="form-control" type="date">
</div>
<!-- User Email -->
<div class="form-group">
<label for="signUserEmail">Your email</label>
<input id="signUserEmail" class="form-control" type="email">
<span class="text-danger" id=""><small id="existingEmailWarningText"></small></span>
</div>
<!-- User Password -->
<div class="form-group">
<label for="signUserPassword">Your password</label>
<input id="signUserPassword" class="form-control" type="password">
</div>
<!-- Login button -->
<div class="form-group">
<button type="button" id="signUpSubmitBtn" class="btn btn-primary form-control">Sign up</button>
</div>
<small>Already have an account? <a id="loginRef" href="#">Log in</a></small>
</form>
</div>
</div>
<!-- COL 3 -->
<div class="col">
</div>
</div>
</div>
</section>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"
crossorigin="anonymous"></script>
<!-- Link to function.js sheet -->
<script src="function.js"></script>
</body>
</html>
最佳答案
您的 for(...
循环应遍历您的帐户数组以检查目标电子邮件是否存在,然后之后(如果不存在重复项)将对象插入数组中。
所以,你的代码宁愿看起来像:
let duplicateExists = false
for(i = 0; i < usersObj.length; i++) {
if(signUserEmail == usersObj[i].username) {
duplicateExists = true
break
}
}
if(!duplicateExists) usersObj.push({firstName: signUserName, age: signUserAge, username: signUserEmail, password: signUserPassword})
但是,我建议采用相反的方式 - 使用 Array.prototype.some()
(检查某些条目是否有重复的用户名
)和 shortcircuited condition check在将表单数据插入结果数组之前:
const usersObj = [{firstName:"James",age:22,username:"James@gmail.com",password:"codity"},{firstName:"Ellen",age:32,username:"Ellen@gmail.com",password:"laura"},{firstName:"Lynn",age:16,username:"Lynn@gmail.com",password:"chicken"}],
dup = {firstName: 'Bill', age:48, username: 'Ellen@gmail.com', password: 'password'},
nodup = {firstName: 'Bill', age: 48, username: 'Bill@gmail.com', password: 'password'},
result = []
const getUserSignUpData = (signupUserData) => {
!usersObj.some(({username}) =>
username == signupUserData.username) && result.push(signupUserData)
}
getUserSignUpData(dup) // no entries are inserted due to duplicate username
getUserSignUpData(nodup) // nodup object is inserted as username is unique
console.log(result)
.as-console-wrapper{min-height:100%;}
关于javascript - 如果具有相同属性值的对象已存在,则插入时跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60907670/