Mam taki obiekt:

const obj = {
  id: '123abc',
  carrier_name: '',
  group_id: '',
  member_id: '',
  plan_name: '',
}

I chcę zwrócić false, jeśli jakakolwiek część obiektu ma pusty ciąg. Na przykład:

const obj = {
  id: '123abc',
  carrier_name: ''ABC,
  group_id: '123',
  member_id: 'xyz',
  plan_name: '',
}

Powyższe zwróciłoby fałsz. Podobnie, jeśli coś takiego jest częściowo wypełnione:

const obj = {
  id: '123abc',
  carrier_name: ''ABC,
  group_id: '',
  member_id: 'xyz',
  plan_name: '',
}

To zwróciłoby fałsz.

Próbowałem czegoś ręcznie, takiego jak to:

return obj.carrier_name.length === 0 || obj.group_id.length === 0 || obj.member_id.length === 0 || obj.plan_name.length === 0

Ale zastanawiam się, czy istnieje lepszy sposób.

-1
nyphur 1 kwiecień 2020, 20:24

3 odpowiedzi

Najlepsza odpowiedź

Użyj Object.values z Array.prototype.some :

const obj = {
  id: '123abc',
  carrier_name: 'a',
  group_id: 'a',
  member_id: 'a',
  plan_name: 'a',
}

console.log(!Object.values(obj).some(val => val === ""))

const obj2 = {
  id: '123abc',
  carrier_name: '',
  group_id: 'a',
  member_id: 'a',
  plan_name: 'a',
}

console.log(!Object.values(obj2).some(val => val === ""))
3
Anurag Srivastava 1 kwiecień 2020, 17:30

Możesz sprawdzić every i Boolean jako wywołanie zwrotne, jeśli masz tylko ciągi znaków .

const check = object => Object.values(object).every(Boolean);

console.log(check({ foo: 'bar' }));          //  true
console.log(check({ foo: '' }));             // false
console.log(check({ foo: '', bar: 'baz' })); // false
console.log(check({ foo: '', bar: '' }));    // false
0
Nina Scholz 1 kwiecień 2020, 17:30

Prosta pętla i kratka

const obj = {
  id: '123abc',
  carrier_name: 'a',
  group_id: 'a',
  member_id: '',
  plan_name: '',
}

const checkIfEmpty = obj => {
  for (const property in obj) {
    if (obj[property].length === 0) {
      return true
    }
  }
  return false
}

console.log(checkIfEmpty(obj))
3
DevTool 1 kwiecień 2020, 17:46