Проверить значение объекта

У меня есть объект JavaScript с ключами и значениями. Мне нужно проверить значения этого объекта, и если он содержит значение «пусто», я хочу выдать предупреждение. Я хочу дать предупреждение только один раз, даже если было несколько «пустых» значений.

Я пробовал так;

data = [
  {first_name: 'John', last_name: 'Doe'},
  {first_name: 'Kiki', last_name: 'empty'},
  {first_name: 'Kim', last_name: 'empty'},
]

data.forEach(function(value){
  if (value.last_name == 'empty'){
    alert('Please fill all the field');
    return false;
  }
});

Это может подтвердить значение, но дважды выдает предупреждение.

Я хочу показать предупреждение только один раз. Как я могу это сделать?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
50
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Используйте some:

const data = [{
    first_name: 'John',
    last_name: 'Doe'
  },
  {
    first_name: 'Kiki',
    last_name: 'empty'
  },
  {
    first_name: 'Kim',
    last_name: 'empty'
  },
];

if (data.some(e => Object.values(e).some(f => f == "empty"))) {
  alert("There is an empty value");
}

Если вы хотите показать и другие данные (например, какое свойство в каком индексе), вы можете использовать другие параметры в функции обратного вызова:

const data = [{
    first_name: 'John',
    last_name: 'Doe'
  },
  {
    first_name: 'Kiki',
    last_name: 'empty'
  },
  {
    first_name: 'Kim',
    last_name: 'empty'
  },
];

if (data.some(e => Object.values(e).some(f => f == "empty"))) {
  let index = data.findIndex(e => Object.values(e).some(f => f == "empty"));
  let [property] = Object.entries(data[index]).find(([k, v]) => v == "empty");
  alert(`The property ${property} at index ${index} is empty.`);
}

Большое спасибо! Второй код значительно улучшил мою программу!

Kiki 08.04.2019 04:02

Он дважды предупреждает вас, один раз для Кики и один раз для Ким. Если вы хотите остановить цикл после первого появления, вам нужно изменить «return false» на «break» следующим образом:

data.forEach(function(value){
  if (value.last_name == 'empty'){
    alert('Please fill all the field');
    break;
  }
});

Кроме того, ваш JSON вернется с нулевым значением, если он будет пустым, а не пустой строкой, как в вашем примере. Итак, ваш пример проверяет кого-то, у кого фамилия «пустая», а не того, кто оставил ее пустой.

Yoko Ishioka 08.04.2019 03:45

Вы можете использовать функцию some, чтобы проверить, является ли хотя бы один объект last_name === 'empty'

const data = [{first_name: 'John',last_name: 'Doe'},{first_name: 'Kiki',last_name: 'empty'  },{first_name: 'Kim',last_name: 'empty'}];

// The function some returns true 
// if at least one object meets the predicate 'last_name === "empty"'.
if (data.some(({last_name}) => last_name === "empty")) alert("There is an empty value");

Я думаю, что цикл может быть удобен в такой ситуации.

let data = [
  {first_name: 'John', last_name: 'Doe'},
  {first_name: 'Kiki', last_name: 'empty'},
  {first_name: 'Kim', last_name: 'empty'},
]

// data.forEach(function(value){
//   if (value.last_name == 'empty'){
//     alert('Please fill all the field');
//     return false;
//   }
// });

for(let i of data) {
  if (i.last_name == "empty") {
    alert('Please fill all the field');
    break;
  }
}

Другие вопросы по теме