Проверить значение объекта - PullRequest
1 голос
/ 08 апреля 2019

У меня есть объект 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;
  }
});

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

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

Ответы [ 4 ]

4 голосов
/ 08 апреля 2019

Использование 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.`);
}
1 голос
/ 08 апреля 2019

Вы можете использовать функцию 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");
0 голосов
/ 08 апреля 2019

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

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;
  }
}
0 голосов
/ 08 апреля 2019

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

data.forEach(function(value){
  if(value.last_name == 'empty'){
    alert('Please fill all the field');
    break;
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...