【问题标题】:map multi json to object with angular使用角度将多 json 映射到对象
【发布时间】:2019-10-31 18:19:10
【问题描述】:

我有多个 JSON 对象,我需要将它们映射到一个对象。 我拥有的不同 JSON 对象包含不匹配的“键”

你能帮我找到解决这个问题的方法吗?

示例 JSON 1:

[
  {
    "id": 1696,
    "date": "2019-06-27T14:18:11",
    "img": {
      "url": "test"
    },
    {
    "id": 1896,
    "date": "2019-06-27T14:18:11",
    "img": {
      "url": "test1"
    }
]

示例 JSON 2:

[
  {
    "uid": 1696,
    "date": "2019-06-27T14:18:11",
    "img": {
      "link": "test"
    },
    {
    "uid": 1896,
    "date": "2019-06-27T14:18:11",
    "img": {
      "link": "test1"
    }
]

【问题讨论】:

  • 您的意思是要将id 属性“重命名”为uid
  • 欢迎来到 StackOverflow!请确保添加最小可验证代码 sn-p 以供其他人查看并了解您的问题。有关如何创建minimal reproducible example 的更多详细信息
  • Tsvetan Ganev - 不...我的意思是如果我的 Key 是 'id' 或 'uid' 我会放入一些对象

标签: angular dictionary rxjs


【解决方案1】:

您可以创建具有所有映射的对象。并使用map() 转换每个数组项。

mapKeys() 是一个递归函数,如果存在键的映射,则映射对象的键。

这适用于任何嵌套级别的对象。

let data = [{ "id": 1696, "date": "2019-06-27T14:18:11", "img": { "url": "test" } }, { "id": 1896, "date": "2019-06-27T14:18:11", "img": { "url": "test1" } } ]; 

let map = { "id": "uid", "url": "link" }; 

function mapKeys(obj) {
  Object.entries(obj).forEach(([key, value]) => {
    if (map[key]) {
      obj[map[key]] = (typeof value === "object") ? mapKeys(value) : value;
      delete obj[key];
    } else {
      obj[key] = (typeof value === "object") ? mapKeys(value) : value;
    }
  });

  return obj;
}

let result = data.map(item => mapKeys(item));

console.log(result);

【讨论】:

  • tnx, Nikhil ...但是 map() 在 typescript 上不起作用你有更多的想法吗?
  • @user3148221 - map() 在打字稿中工作。你得到的错误是什么?您还可以使用for 循环来迭代数据数组并将映射的元素推送到新的结果数组。
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 2021-10-31
  • 2018-05-16
  • 1970-01-01
  • 2020-02-07
  • 2012-04-23
  • 1970-01-01
  • 2014-11-07
相关资源
最近更新 更多