【问题标题】:Modify JSON with typescript使用打字稿修改 JSON
【发布时间】:2016-08-21 03:05:34
【问题描述】:

我正在创建一个 Angular 2 应用程序。我的服务器端请求返回一个 JSON,看起来像

[{"CountryId":1,"CountryCode":"IND","CountryName":"India","State":[]},
 {"CountryId":2,"CountryCode":"AUS","CountryName":"Australia","State":[]}]

我需要在下拉列表中显示它。所以我需要创建一个看起来像

的新 JSON
[{"Label":"India","Value":"IND"},
{"Label":"Australia","Value":"AUS"}]

我不想写 for 循环,因为我将在很多地方使用它,并且我希望它在性能上尽可能好。请让我知道是否有任何内置函数可以进行这种 JSON 重组。

【问题讨论】:

  • 您确定需要转换 JSON 吗?不能将 UI 组件配置为对标签和值使用备用键吗?
  • for 循环正是您所需要的(虽然 map() 更好)。
  • @Thilo 我正在使用自定义库primeng。这可能暂时不支持。
  • 有时候你只需要写一些代码就行了!
  • 您并不想创建新的 JSON。我假设您正在将返回的 JSON 转换为 javascript array 并希望将数组中的 objects 转换为具有不同属性的对象。在您的标题中使用 JSON 并使用 JSON 标记使您看起来特别在谈论 JSON(JavaScript 对象表示法),即 javascript 对象的字符串表示。

标签: javascript json typescript


【解决方案1】:

除非您确切知道响应数组中有多少元素,否则您无法避免迭代它,尽管您可以选择如何:

// A
let result = response.map((elem) => ({
  'Label': elem.CountryName,
  'Value': elem.CountryCode
}))


// B
let result = []

response.forEach((elem) =>
  result.push({
    'Label': elem.CountryName,
    'Value': elem.CountryCode
  })
)


// C
let result = []

for (i in response) {
  result.push({
    'Label': response[i]['CountryName'],
    'Value': response[i]['CountryCode']
  })
)

【讨论】:

  • ...而且这些都不太可能导致任何性能问题。
  • 是的,别担心,没有这么简单的结构
  • 非常感谢。让我试试看。
【解决方案2】:

使用 ES6 解构,最紧凑的形式是:

 response.map(({CountryCode: Label, CountryName: Value}) => ({Label, Value}))

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 2022-01-23
    • 2023-03-07
    • 2021-11-14
    • 2020-05-23
    • 1970-01-01
    • 2019-05-13
    • 2016-11-01
    • 2021-01-26
    相关资源
    最近更新 更多