Проверьте, содержит ли json ключ

#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 Откройте консоль и посмотрите, что отображается. Когда это массив, он работает для меня.