Проверьте, все ли свойства объекта TypeScript пусты - PullRequest
1 голос
/ 25 февраля 2020

У меня есть объект, который выглядит следующим образом:

objectProp = {
  property1: [],
  property2: [],
}

Я хочу проверить, все ли свойства (которые являются строковыми массивами), если этот объект нулевой, и возвращают true. Я почему-то застрял. Как я могу это сделать? Я использую "target": "es2015"

Я пробовал это, но не работает:

 if (!Object.keys(this.objectProp).every(array => array.length > 0)) {
      console.log('all are empety');
    }

Ответы [ 4 ]

5 голосов
/ 25 февраля 2020

Вам нужно использовать Object.values(this.objectProp) вместо Object.keys(this.objectProp), чтобы это работало. Так как метод Object.keys возвращает массив имен собственных перечисляемых свойств данного объекта, а метод Object.values возвращает массив значений собственных перечисляемых свойств данного объекта, что на самом деле то, что вы ищем.

let objectProp = {
  property1: [],
  property2: [],
}

console.log(Object.keys(objectProp))

console.log(Object.values(objectProp))

Для Es2015, вы можете попробовать это:

let obj = {
  property1: [],
  property2: [],
}

// Log is print only when all arrays are empty
if (Object.keys(obj).map(e => obj[e]).every(a => a.length === 0)) {
  console.log('all are empty');
}
3 голосов
/ 25 февраля 2020

Используя Object.keys(), вы можете сделать это следующим образом

var objectProp = {
  property1: [],
  property2: [],
}

if(Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length === 0)){
  console.log('All is empty')
}
2 голосов
/ 25 февраля 2020

Вы должны использовать Object.values следующим образом:

if (!Object.values(this.objectProp).every(({length}) => Boolean(length))) {
  console.log('all are empety');
}
0 голосов
/ 25 февраля 2020

Большинство ответов, похоже, пропустили ту часть о вашей логике, что c были немного неверными. Они скажут пустой, если только один элемент пуст. Это потому, что logi c равен !every > 0 Но переключение этого logi c на every <= 0 даст то, что вы хотите.

например.

В приведенном ниже примере будет возвращено true, true для сломанной версии. Но true, false для фиксированного.

var objectProp = {
  property1: [],
  property2: [],
};

var objectProp2 = {
  property1: [],
  property2: [],
  property3: ['not empty']
};


function allIsEmptyBroken(objectProp) {
  return (!Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length > 0));
}

function allIsEmptyFixed(objectProp) {
  return (Object.keys(objectProp).every(key => objectProp[key] && objectProp[key].length <= 0));
}


console.log('allIsEmptyBroken');
console.log(allIsEmptyBroken(objectProp));
console.log(allIsEmptyBroken(objectProp2));

console.log('allIsEmptyFixed');
console.log(allIsEmptyFixed(objectProp));
console.log(allIsEmptyFixed(objectProp2));
...