Website-Suche

Schleife über TypeScript-Objekteigenschaften unterbrechen


Ich möchte mit TypeScript über Objekteigenschaften iterieren. Aber ich möchte stoppen, sobald ein bestimmtes Objekt gefunden wurde.

So etwas wie:

function hasElement() {
    let obj = {
        a: 'a',
        b: 'b',
        c: 'c'
    }
    let found = false;
    for (let i = 0; i < Object.keys(this.obj).length && !found; i++) {
        let prop = obj[i];
        found = prop === 'a';
    }
    return found;
}
console.log(hasElement());

Aber obj[i] funktioniert nicht, weil der Schlüssel keine Zahl ist. Natürlich könnte ich break verwenden oder zu Labels springen, aber das ist meiner Meinung nach hässlich, da ich lieber die Schleifenbedingung von vornherein angeben würde.

Antwort #1

So iteriert man in TypeScript kein Objekt. Du suchst nach for..of:

for (const key of Object.keys(obj)) {
  if (obj[key] === 'a') { return true; }
}
return false;

Sie können auch .find() verwenden:

const matchingKey = Object.keys(obj).find(key => obj[key] === 'a');
return Boolean(matchingKey); // convert to boolean.

Antwort #2

Du könntest dafür Array.filter oder Array.find verwenden.

Array.filter wird die gesamte Liste durchgehen, aber dafür gibt es bessere Unterstützung.

let found = Object.keys(obj).filter(key => obj[key] == 'a')[0]

Array.find sollte genau das sein, was Sie brauchen, aber es wird von einigen Browsern nicht unterstützt.

let found = Object.keys(obj).find(key => obj[key] == 'a');

IE unterstützt es nicht. Die MDN-Dokumentation finden Sie hier.

Verwandte Artikel