Как проверить, является ли объект пустым, используя lodash _isEmpty? - PullRequest
1 голос
/ 09 июля 2019

У меня есть функция карты, которая теперь возвращает пустой объект для массива, если я проверяю массив _isEmpty, это условие должно удовлетворяться, но оно не входит в оператор if.Есть идеи, что реализовано неправильно или лучше подход?

main.js

const validateResponse = _.map(drugs ,validateValues);

теперь validateResponse возвращает [{}] и должно удовлетворять условию

  if (_.isEmpty(validateResponse)) {
      throw invalidPriceError;
    }

Ответы [ 4 ]

0 голосов
/ 09 июля 2019

Если вы просто хотите проверить, существует ли отдельный массив с одним пустым объектом [{}], вы можете использовать _.isEqual:

const hasEmpty = arr => _.isEqual(arr, [{}])

console.log(hasEmpty([])) // false
console.log(hasEmpty([{}])) // true
console.log(hasEmpty([{}, {}])) // false
console.log(hasEmpty([{ a: 1 }])) // false
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
0 голосов
/ 09 июля 2019

Согласно документации lodash здесь :

Значения, подобные массиву, такие как объекты аргументов, массивы, буферы, строки или jQuery-подобные коллекции, считаются пустыми, если ониимеют длину 0. Аналогично, карты и наборы считаются пустыми, если они имеют размер 0.

[{}].length равно 1. Капуста в коробке, если выбудут.Массив с одним пустым объектом.Следовательно, isEmpty оценивается как ложное.[].length, с другой стороны, равен 0.

0 голосов
/ 09 июля 2019

Может быть несколько других случаев, которые вы хотите охватить, например, пустой массив или массив из двух пустых объектов и т. Д. Варианты следующих действий должны делать то, что вам нужно ...

let array = [{}];
// contains any empty object
console.log(_.some(array, _.isEmpty))

// contains only empty objects
console.log(_.every(array, _.isEmpty))

// contains exactly one empty object
console.log(_.every(array, _.isEmpty) && array.length == 1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.js"></script>
0 голосов
/ 09 июля 2019

Вам придется сжать внутренности или проверить один уровень глубже:

if (!validateResponse.filter(r => !_.isEmpty(r)).length){
  throw invalidPriceError;
}
...