Eliminieren Sie TypeScript-Fehler beim Reduzieren verschachtelter Objekte
P粉388945432
P粉388945432 2024-01-10 18:05:39
0
1
627

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粉388945432
P粉388945432

Antworte allen(1)
P粉976737101

你可以将

for (const i in ob) { .. }

改成

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage