Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何比较输入和JSON数据_Javascript_Arrays_Json_Error Suppression - Fatal编程技术网

Javascript 如何比较输入和JSON数据

Javascript 如何比较输入和JSON数据,javascript,arrays,json,error-suppression,Javascript,Arrays,Json,Error Suppression,我正在做一个学校项目,我需要验证一些用户,而不需要建立一个真正的数据库。我的问题是,当我将输入中输入的信息与JSON中存储的信息进行比较时,每个不匹配的选项都会弹出一个错误。我想要的是将多个错误减少为一个错误(如果用户名或密码与JSON中存储的信息不匹配)。以下是我的JavaScript: const form=document.querySelector('form'); 表.addEventListener('submit',函数(e){ e、 预防默认值(); const emailIn

我正在做一个学校项目,我需要验证一些用户,而不需要建立一个真正的数据库。我的问题是,当我将输入中输入的信息与JSON中存储的信息进行比较时,每个不匹配的选项都会弹出一个错误。我想要的是将多个错误减少为一个错误(如果用户名或密码与JSON中存储的信息不匹配)。以下是我的JavaScript:

const form=document.querySelector('form');
表.addEventListener('submit',函数(e){
e、 预防默认值();
const emailInput=document.querySelector(“#email”).value;
const pwdInput=document.querySelector('#pwd').value;
常量对象={
电子邮件:emailInput,
pwd:pwdInput
};
fetch('users.json')
.then(res=>res.json())
。然后(数据=>{
data.forEach(函数(用户){
const userInfo=JSON.stringify(用户);
const databaseInfo=JSON.stringify(对象);
if(userInfo==数据库信息){
console.log('success');
}否则{
console.log('err');
}
});
})
.catch(error=>console.log('error');

});使用普通JavaScript:

//这只是为了模拟从JSON获取
函数fakeFetch()
{
还愿([
{“email”:“James”,“pwd”:“1111”},
{“email”:“Peter”,“pwd”:“2222”},
{“email”:“Josh”,“pwd”:“3333”}
]);
}
const form=document.querySelector('form');
表单。addEventListener('submit',函数(e){
e、 预防默认值();
const emailInput=document.querySelector(“#email”).value;
const pwdInput=document.querySelector('#pwd').value;
常量对象={
电子邮件:emailInput,
pwd:pwdInput
};
伪造
。然后(用户=>{
//检查用户中的每个用户,并尝试查找匹配项
for(让用户对用户)
{
//正在从当前用户解构电子邮件和密码
让{email,pwd}=user;
//将活动用户的电子邮件和pwd与对象中的电子邮件和pwd进行比较
if(email==object.email&&pwd==object.pwd)
{
//找到了,做点什么
console.log('found!');
回来
}
}
//未找到,请执行其他操作
日志('notfound…');
})
.catch(错误=>console.log(错误));
});

我试着在评论中解释,但它可能更容易向您展示。我认为最好比较尽可能少的数据量(而不是一个大的JSON字符串),比如电子邮件对电子邮件,密码对密码

因此,我更改了您的
if
,以进行更简单的比较

要将所有错误压缩为一个错误,可以包括一个标志,如果找到匹配项,则将其设置为
true
。然后在forEach循环之外,您可以检查该标志并只记录1个错误(如果没有匹配)

var用户=[{
电子邮件:“user1”,
pwd:“pass1”
}, {
电子邮件:“user2”,
pwd:“密码2”
}];
变量对象={
电子邮件:“user3”,
pwd:“pass3”
};
var isMatch=错误;
users.forEach(函数(用户){
if(user.email===object.email&&user.pwd===object.pwd){
控制台日志(“成功”);
isMatch=true;
}
});
如果(!isMatch){
//即使有多个用户,也只记录一次日志
log(“不匹配!”);

}
函数的主要思想是,给定一个元组(用户名、密码),检查它是否存在于数据库中,在本例中,数据库是一个对象数组。 您可以说您想从数组中筛选用户名和密码与用户插入的内容匹配的条目。因为用户名/密码不应该有重复的元组,所以过滤器应该返回匹配的元组或null

解决这一问题的方法可以是:

函数验证登录(loginObject){
返回新承诺((解决、拒绝)=>{
fetch('users.json')
.then(res=>res.json())
.then(data=>data.filter(entry=>entry.email===
loginObject.email&&loginObject.pwd==object.pwd).length>0?解析(true):解析(false))
.catch(错误=>拒绝(错误));
});
})
}
验证登录(loginObject)
。然后(result=>result==true?console.log('Login successful!'):console.log('Login failed'))

.catch(error=>console.log(error))
似乎应该比较值而不是对象。所以像
user.email===object.email&&user.pwd===user.pwd)
你的
JSON.Stringify
可能也没有必要。然后,对于仅有的1个错误位,可以添加一个名为find的布尔值,如果上述条件为true,则将其设置为true。然后在循环外部检查该var,如果其
false
记录未找到的错误,则需要
=
=
。示例代码:嘿!谢谢你的回复,但我是JavaScript新手,不理解你最后一部分关于布尔语的内容。我尝试了这个方法,但没有成功:如果(user.email===object.email&&user.pwd===object.pwd){var flag=true;console.log('suc');}否则如果(flag=false){console.log('err');}@Santiago在forEach循环之前将该标志初始化为false,那么如果找到,将其设置为true。下一步是在
forEach
循环
if(!flag){console.log(“no match”);}
之外只检查一次,这样就不会针对每个不匹配打印,只在循环之后打印一次。