Heim  >  Fragen und Antworten  >  Hauptteil

Eliminieren Sie TypeScript-Fehler beim Reduzieren verschachtelter Objekte

Ich erstelle ein Bearbeitungsformular für mein Unternehmen und jemand in meinem Team hat beschlossen, unser API-Nutzlast-Rückgabeformat zu ändern, ohne andere Teammitglieder zu konsultieren, und jetzt versuchen wir, das nachzuholen.

Da der API-Aufruf, den wir benötigen, um den Wert an die Datenbank zurückzugeben, nicht als verschachteltes Objekt eingerichtet ist, muss ich ihn reduzieren, um die Bearbeitung und Übermittlung des Werts zu erleichtern.

Dies ist die neue verschachtelte Struktur:

{
       "status": 1, 
       "data" : {
            "name": "Tank",
            "dimensions": "2.0 x 2.5 x 4.0"
       }
    }

Ich muss es wieder in eine Struktur wie diese umwandeln:

{
       "status": 1, 
       "name": "Tank",
       "dimensions": "2.0 x 22.5 x 4.0"
    }

Ich habe online mehrere Lösungen gefunden, aber alle haben mir den gleichen TypeScript-Fehler angezeigt:

"for (... in ...)-Anweisungen müssen mithilfe von if-Anweisungen gefiltert werden"

Ich habe auch festgestellt, dass viele Lösungen den Namen des ersten Elements vor den verschachtelten Elementen einbetten, etwa so:

{
       "status": 1, 
       "data.name": "Tank",
       "data.dimensions": "2.0 x 22.5 x 4.0"
    }

Kann mir jemand zeigen, wie ich diese Flatten-Funktion umschreiben kann, um den TS-Fehler zu beseitigen und den Namen des Elements der ersten Ebene nicht an seine verschachtelten Elemente anzuhängen, sodass ich ein einfaches Objekt mit einer Ebene erhalte?

Das ist meine Abflachungsfunktion:

const obj = values;

const flattenObj = (ob) => {
  // 包含最终结果的对象
  const result = {};
  // 遍历对象“ob”
  for (const i in ob) {
      // 使用typeof()函数检查i的类型,并递归调用函数
      if ((typeof ob[i]) === 'object' && !Array.isArray(ob[i])) {
          const temp = flattenObj(ob[i]);
          for (const j in temp) {
              // 将temp存储在result中
              result[i + '.' + j] = temp[j];
          }
      }
      // 否则直接将ob[i]存储在result中
      else {
          result[i] = ob[i];
      }
  }
  return result;
};

console.log(flattenObj(ob));

P粉388945432P粉388945432283 Tage vor581

Antworte allen(1)Ich werde antworten

  • P粉976737101

    P粉9767371012024-01-11 00:55:24

    你可以将

    for (const i in ob) { .. }

    改成

    for (const [i, obi] of Object.entries(ob)) { // use obi instead of ob[i] }

    这样你完全不会触碰原型的内容。

    Antwort
    0
  • StornierenAntwort