簡體   English   中英

如何迭代 TypeScript 上的對象,更改其相應數字的字符串值?

[英]How to iterate an object on TypeScript changing a string value for its corresponding number?

我有一個來自第三方 API 的類型,它有很多屬性(50+),它們將所有值都作為字符串。 偶數和布爾值變成了字符串(分別是“5”和“false”),我想解決這個可怕的問題。

所以我創建了一個這樣的類型來接收來自 API 的響應並在修復后保留

interface Person {
  age: string | number,
  name: string,
  hasChildren: string | boolean,
  ...
}

我想改變這個

const responseFromApi: Person = {
  age: "20",
  name: "John",
  numberOfChildren: "true"
  ...
}

const afterTreatment: Person = {
  age: 21,
  name: "John",
  numberOfChildren: true
  ...
}

這是一個例子......我的對象再次比這大得多,在這種情況下有很多道具所以單獨對待它們不是我正在尋找的解決方案。

我的意圖是遍歷對象並更改為數字或布爾值,可以根據類型進行更改。

您可以對數組進行循環,檢查 element.age 是否為字符串,如果是,則解析年齡並再次設置。 更好的解決方案可能是通過列表進行映射,並執行與上面相同的操作,這樣它就創建了一個新數組,然后您可以覆蓋/執行您需要的操作。

主意:

const changed = persons.map((p: Person) => {
  if (typeof p.age === "string") {
    return {
      ...p,
      age:parseInt(p.age)
    }
  }
  return p
});
    

只要變量約定與 person1、person2、person3 等一致,這就應該起作用,並且您還需要知道添加的總人數才能使 forloop 起作用

interface Person {
    age: string | number,
    name: string
}
const person1: Person = {
  age: 20,
  name: "Jonh",
}
const person2: Person = {
  age: "21",
  name: "Marie",
}
const lengthOfPersons: number = 2;
const newArray = [];
for(let i = 0; i < lengthOfPersons; i++)
{
 const n = i + 1;
 const row = eval('person'+n);
 newArray.push({...row, age: +row.age})
}
console.log(newArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM