Как проверить, являются ли все свойства объекта нулевыми - PullRequest
0 голосов
/ 31 мая 2018

У меня есть объект, иногда он пустой, как, например, {} В других случаях он будет иметь свойства, для которых установлено значение NULL.

{
  property1: null,
  property2: null
}

Как определить, ВСЕ ли свойства в этом объектеноль?Если все они равны NULL, тогда возвращаем false.

В данный момент я использую lodash для проверки первого случая, когда объект просто {} пуст.Но мне также нужно охватить второй случай.

if (isEmpty(this.report.device)) {
  return false;
}
return true;

Ответы [ 5 ]

0 голосов
/ 31 мая 2018

Подход с использованием .some() вместо .every():

function isEmpty (obj) {
    return !Object.values(obj).some(element => element !== null);
}

Эта функция (с именем isEmpty соответствует имени, данному в вопросе) возвращает false, если какое-либо свойство obj не null, а true в противном случае.

0 голосов
/ 31 мая 2018

Это очень просто и может быть сделано с одним вкладышем!

function IsAllPropertiesNull(obj) {
 return Object.values(obj).every(v=>v == null);
}

a = {'a': null, 'b':null};
var isAllNull = IsAllPropertiesNull(a) 
// isAllNull = true

объяснение - получить все значения объекта - повторить их и проверить на ноль

Удачи!

0 голосов
/ 31 мая 2018

Вы можете использовать Object.values для преобразования объекта в массив и использовать every для проверки каждого элемента.Используйте ! для отмены значения.

let report = {
  property1: null,
  property2: null,
}

let result = !Object.values(report).every(o => o === null);

console.log(result);

Например, некоторые элементы не являются null

let report = {
  property1: null,
  property2: 1,
}

let result = !Object.values(report).every(o => o === null);

console.log(result);

Документ: Object.values ​​() , каждые ()

0 голосов
/ 31 мая 2018

Использование Object.entries и Array.every

let obj = {
   property1: null,
   property2: null,
};

function isEmpty(o) {
  return Object.entries(o).every(([k,v]) => v === null);
}

if(isEmpty(obj)) {
   console.log("Object is empty");
} 
0 голосов
/ 31 мая 2018

Вы можете использовать метод Object.keys(), который вернет все ключи в этом объекте в виде массива.Это позволяет сделать Object.keys(this.report.device).filter(key => !this.report.device[key] === null), который вернет вам количество ненулевых ключей, если это значение равно 0, тогда у вас есть ответ.

По сути, полагаться на null свойства не очень хорошоПодход лучше сделать эти свойства undefined или просто вернуть плоский объект из вашего API.

Надеюсь, это помогло.

...