将多个json映射到带有角度的对象

时间:2019-10-31 18:19:10

标签: angular dictionary rxjs

我有多个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"
    }
]

1 个答案:

答案 0 :(得分:0)

您可以创建具有所有映射的对象。并使用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);

相关问题