Rumah  >  Soal Jawab  >  teks badan

Hapuskan ralat TypeScript apabila meratakan objek bersarang

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粉388945432P粉388945432283 hari yang lalu573

membalas semua(1)saya akan balas

  • P粉976737101

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

    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.

    balas
    0
  • Batalbalas