Проверьте, все ли значения ключей объектов ложны - PullRequest
0 голосов
/ 15 января 2020

У меня есть объект

const currentData: CreateProjectData = {
  title: '',
  description: '',
  projectType: '',
  projectStart: undefined,
  projectTime: 0,
};

Есть ли способ проверить, являются ли все значения в объекте ложными (например, 0, undefined, '', т. Д.) Без преобразования объекта в массив а потом зацикливаться на этом?

Ответы [ 4 ]

2 голосов
/ 15 января 2020

Используйте для ... в l oop для итерации объекта и проверки истинных значений

const currentData = {
  title: '',
  description: '',
  projectType: '',
  projectStart: undefined,
  projectTime: 0,
};

var checkFalsyObject = (data) => {
  for (var prop in data) {
    if (data[prop]) return false;
  }
  return true;
}

console.log(checkFalsyObject(currentData));

Но более простым подходом было бы использование Object.values для получения всех значений и затем Array.prototype.every для проверки, достаточен ли для всех элементов переданный обратный вызов.

const currentData = {
  title: '',
  description: '',
  projectType: '',
  projectStart: undefined,
  projectTime: 0,
};

const areAllFalsy = Object.values(currentData).every(el=>!el);

console.log(areAllFalsy)
0 голосов
/ 15 января 2020

Проверьте это

const CreateProjectData = {
  title: '',
  description: null,
  projectType: 1,
  projectStart: undefined,
  projectTime: 0,
};

for(var key in CreateProjectData){
  if(!CreateProjectData[key])
    console.log(`${key} is false`);
  else
    console.log(`${key} is true`);
}
0 голосов
/ 15 января 2020

Поскольку вам необходимо проверить все значения объекта, если вы не хотите жестко закодировать каждое возможное свойство, любое решение будет включать в себя все oop какого-либо рода. Если вы хотите сделать это без создания каких-либо массивов, единственный способ сделать это с помощью for..in:

let allFalsey = true;

const currentData = {
  title: '',
  description: '',
  projectType: '',
  projectStart: undefined,
  projectTime: 0,
};

for (const prop in currentData) {
  if (currentData[prop]) {
    allFalsey = false;
    break;
  }
}
console.log(allFalsey);

Но использовать массив на самом деле было бы намного проще, использование for..in действительно глупо:

const currentData = {
  title: '',
  description: '',
  projectType: '',
  projectStart: undefined,
  projectTime: 0,
};

const allFalsey = !Object.values(currentData).some(Boolean);
console.log(allFalsey);
0 голосов
/ 15 января 2020

Если вы не хотите, чтобы когда-либо для этой цели создавался дополнительный массив:

function isDubiousData(data) {
  for (let p in data)
    if (data[p]) return false;
  return true;
}

const currentData = {
  title: '',
  description: '',
  projectType: '',
  projectStart: undefined,
  projectTime: 0,
  budget: null,
  onTime: false,
  bankAccountBalance: 0n,
  teamCoherency: NaN,
  qualityIndex: -0
};

console.log(isDubiousData(currentData));

currentData.title = "0";
console.log(isDubiousData(currentData));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...