Как проверить, является ли значение объекта Javascript массивом, а не пустым - PullRequest
0 голосов
/ 09 мая 2019

Прежде чем запустить какой-либо код, мне нужно проверить правильность данных, которые я передаю (из файла JSON).

В частности, я пытаюсь проверить, существует ли электронная почта, и мой body object: - имеет по крайней мере один ключ - у каждого ключа есть значение - и это значение должно быть массивом с заполненным им хотя бы одним элементом.

const email = "john@gmail.com"
const body = {
   "fruit": ["apple"],
   "vegetables": ["carrot", "beans"]
}

Вот чтоЯ уже пробовал:

if (email && Object.keys(body).length > 0 && Object.keys(body) instanceof Array) {
   // run some code
} else {
  // log error
}

Является ли instanceof лучшим методом здесь?Мне интересно, если я должен использовать вместо этого .isArray ().Также я должен выполнить это на Object.keys или Object.value?

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Один из вариантов - проверить Object.values из body и посмотреть, является ли .every один из них массивом с ненулевой длиной:

const email = "john@gmail.com"
const body = {
   "fruit": ["apple"],
   "vegetables": ["carrot", "beans"]
}
const ok = email && Object.values(body).every(val => Array.isArray(val) && val.length !== 0);
if (ok) {
  console.log('ok');
} else {
  // handle error
}

Проблема с

Object.keys(body) instanceof Array

заключается в том, что это будет всегда вернуть true, если body является объектом:

const email = "john@gmail.com"
const body = { foo: 'bar' }
console.log(Object.keys(body) instanceof Array);
1 голос
/ 09 мая 2019

Вы можете использовать Object.keys и проверить, что каждое значение является массивом и имеет хотя бы одно значение.

Object.keys(body).every(key => Array.isArray(body[key]) && body[key].length !== 0)

Это проверит для каждого ключа тела, что его значение является массивом(используя Array.isArray) и что в нем есть хотя бы один элемент (используя body[key].length).

Кроме того, .every возвращает true, только если все тесты прошли .

Array.every MDN документация

Object.keys MDN документация

const email = "john@gmail.com"
const body = {
   "fruit": ["apple"],
   "vegetables": ["carrot", "beans"]
}

if (email && Object.keys(body).length > 0 && Object.keys(body).every(key => Array.isArray(body[key]) && body[key].length !== 0)) {
   console.log('hooray!');
} else {
  // log error
}
...