javascript - Skontrolujte, či je konkrétny objekt v typescript prázdny


Ako skontrolovať, či je objekt prázdny?

napr :

private brand: Brand = new Brand();

Skúšal som:

if (this.brand) {
  console.log('is empty');   
}

nefunguje.

Odpoveď č. 1

Použite Object.keys(obj).length na kontrolu, či je prázdny.

Výstup : 3

Zdroj: Object.keys()

Odpoveď č. 2

Môžete použiť Object.keys takto:

class Brand { }
const brand = new Brand();

if (Object.keys(brand).length === 0) {
  console.log("No properties")
}

Ak chcete skontrolovať, či objekt má aspoň jedno nenulové, nedefinované vlastnosť:

  • Získajte všetky hodnoty objektu do poľa pomocou Object.values()
  • Skontrolujte, či má aspoň jedna hodnota pomocou some

const hasValues = 
    (obj) => Object.values(obj).some(v => v !== null && typeof v !== "undefined")

class Brand { }
const brand = new Brand();

if (hasValues(brand)) {
  console.log("This won't be logged")
}

brand.name = null;

if (hasValues(brand)) {
  console.log("Still no")
}

brand.name = "Nike";

if (hasValues(brand)) {
  console.log("This object has some non-null, non-undefined properties")
}

Odpoveď č. 3

Tu je porovnanie medzi dvoma najpopulárnejšími odpoveďami, majú mierne odlišné dôsledky:

let o1 = {}
console.log(JSON.stringify(o1) === '{}')
console.log(Object.keys(o1).length === 0)
// true
// true

let o2 = { p: undefined }
console.log(JSON.stringify(o2) === '{}')
console.log(Object.keys(o2).length === 0)
// true
// false

let o3 = { l: null }
console.log(JSON.stringify(o3) === '{}')
console.log(Object.keys(o3).length === 0)
// false
// false

Odpoveď č. 4

Môžete tiež použiť lodash na kontrolu objektu

if(_.isEmpty(this.brand)){
    console.log("brand is empty")
}

Odpoveď č. 5

Object.keys(myObject).length == 0

Objekt Map možno vytvoriť s prázdnymi vlastnosťami a veľkosť nemusí fungovať. Objekt nemusí byť rovný prázdnemu alebo nedefinovanému

Ale s vyššie uvedeným kódom môžete zistiť, či je objekt naozaj prázdny alebo nie.

Odpoveď č. 6

Toto je najschodnejšia konštrukcia, o ktorej viem, hoci používa trochu mätúci for...in cyklus, ktorý sa neprenáša (v mojich testoch je asi 2x rýchlejší ako Object.keys)

export function isObjectEmpty(object: Record<string, unknown>): boolean {
  for (const property in object) {
    // if any enumerable property is found object is not empty
    return false;
  }

  return true;
}

Súvisiace články