#javascript #json
#javascript #json
Вопрос:
Я хочу выполнить поиск в файле JSON, чтобы узнать, содержит ли он адрес электронной почты, который я ищу (example@mail.com в приведенном ниже коде). Однако это не работает.
function contains(arr, key, val) {
for (var i = 0; i < arr.length; i ) {
if(arr[i][key] === val) return true;
}
return false;
}
emailRecord = JSON.parse(req.responseText); //Got this from an XMLHttpRequest.
if(contains(fullEmailRecord, "email", "example@mail.com"))
{
console.log("LOGGED IN")
}
JSON:
[
{
"email": "example@mail.com"
},
{
"email": "mail@example.com"
}
]
function contains(arr, key, val) {
for (var i = 0; i < arr.length; i ) {
if(arr[i][key] === val) return true;
}
return false;
}
const fullEmailRecord = [
{
"email": "example@mail.com"
},
{
"email": "mail@example.com"
}
];
if(contains(fullEmailRecord, "email", "example@mail.com"))
{
console.log("LOGGED IN")
}
Комментарии:
1. Похоже, здесь это работает
2. О, но вы используете
emailRecord = JSON.parse(req.responseText);
, а затем передаетеif(contains(fullEmailRecord,
другую переменную — похоже, опечатка
Ответ №1:
Это работает во фрагменте кода, но не в исходном фрагменте кода из-за переменной fullEmailRecord
, используемой вместо emailRecord
.
Комментарии:
1. Ошибка, которую я получаю,
Uncaught TypeError: Cannot read property 'length' of undefined at contains (background.js:8) at background.js:37
2. Да, ваша переменная
fullEmailRecord
не определена иemailRecord
соответствует вашему массиву.
Ответ №2:
Я думаю, что это намного проще, найдите его в строке вместо json следующим образом:
req.responseText.contains("example@mail.com")
или
req.responseText.indexOf("example@mail.com") > -1
Завершите использование:
if (req.responseText.contains("example@mail.com")) {
console.log("LOGGED IN")
}
Ответ №3:
сделайте это:
arr.map(e => e.email === 'YOUR EMAIL');
если это возвращает объект, значит, он существует
другими словами, вы можете изменить свою функцию на это
function contains(arr, key, val) {
return arr.map(e => e[key] === val)
}
Комментарии:
1. Я получаю эту ошибку, когда пытаюсь это сделать:
Uncaught TypeError: Cannot read property 'map' of undefined
2. это означает, что ваш массив, который вы вводите, не является массивом … являются ли ваши данные массивом?
3. Это ответ, который я получаю:
[{"email":"example@mail.com"},{"email":"mail@example.com"}]
4. Попробуйте эту скрипку …. jsfiddle.net/eddsters/da9nLkh5 Откройте консоль и посмотрите, что отображается. Когда это массив, он работает для меня.