Hapuskan ralat TypeScript apabila meratakan objek bersarang
P粉388945432
P粉388945432 2024-01-10 18:05:39
0
1
619

Saya sedang membuat borang edit untuk syarikat saya dan seseorang dalam pasukan saya memutuskan untuk menukar format pemulangan muatan API kami tanpa berunding dengan ahli pasukan lain dan kini kami cuba mengejar ketinggalan.

Memandangkan panggilan API yang kita perlukan untuk menghantar semula nilai kepada pangkalan data tidak disediakan sebagai objek bersarang, saya perlu meratakannya untuk memudahkannya memanipulasi nilai dan menyerahkannya.

Ini ialah struktur bersarang baharu:

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

Saya perlu menukarnya kembali kepada struktur seperti ini:

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

Saya menemui berbilang penyelesaian dalam talian, tetapi semuanya memberi saya ralat TypeScript yang sama:

"untuk (... dalam ...) pernyataan mesti ditapis menggunakan pernyataan if"

Saya juga mendapati bahawa banyak penyelesaian membenamkan nama elemen pertama di hadapan elemen bersarang, seperti ini:

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

Bolehkah seseorang menunjukkan kepada saya cara menulis semula fungsi rata ini untuk menghapuskan ralat TS dan tidak menambahkan nama elemen tahap pertama pada elemen bersarangnya supaya saya mendapat objek satu tahap yang mudah?

Ini adalah fungsi merata saya:

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

membalas semua(1)
P粉976737101

Anda boleh

for (const i in ob) { .. }

ditukar kepada

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

Dengan cara ini anda tidak akan menyentuh kandungan prototaip sama sekali.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan