使用JavaScript通过匹配键值和索引值来组合两个JSON对象

时间:2017-11-13 01:46:50

标签: javascript arrays angularjs json

好吧,我一直绞尽脑汁,用各种方法尝试这种方法,但我一直在努力。我甚至尝试使用Angular来执行嵌套的ng-repeats来过滤我需要的属性但是资源太重了。

我要做的是查找“groups”数组中每个对象的“indices”值,并通过将索引与“indices”值匹配,在“person”数组中找到相应的对象,然后将该值推送到'groups'数组中的相应对象。

我只是在从api返回响应时尝试在JavaScript中执行此操作。

以下示例:

    var obj = {
    "groups": [
        {
          "name": "GroupA",
          "indices": [
            0
          ]
        },
        {
          "name": "GroupB",
          "indices": [
            1
          ]
        },
        {
          "name": "GroupC",
          "indices": [
            2,
            3
          ]
        }
      ],
    "person": [
        {"name": "Archer"},
        {"name": "Lana"},
        {"name": "Mother"},
        {"name": "Barry"}
      ]
  };

这就是我想要的最终对象:

 var obj = {
    "groups": [
        {
          "name": "GroupA",
          "indices": [
            0
          ],
        "person": [
          {"name": "Archer"}
          ]
        },
        {
          "name": "GroupB",
          "indices": [
            1
          ],
          "person": [
            {"name": "Lana"}
          ]
        },
        {
          "name": "GroupC",
          "indices": [
            2,
            3
          ],
          "person": [
            {"name": "Mother"},
            {"name": "Barry"}
          ]
        }
      ]
  };

1 个答案:

答案 0 :(得分:2)

我会使用forEach作为外部循环,而不是map,但这不仅仅是一种风格问题:

 obj.groups.forEach(g => g.person = g.indices.map(i => obj.person[i]))

var obj = {
    "groups": [
        {
          "name": "GroupA",
          "indices": [0]
        },
        {
          "name": "GroupB",
          "indices": [ 1 ]
        },
        {
          "name": "GroupC",
          "indices": [2,3 ]
        }
      ],
    "person": [
        {"name": "Archer"},
        {"name": "Lana"},
        {"name": "Mother"},
        {"name": "Barry"}
      ]
  };

  obj.groups.forEach(g =>  g.person = g.indices.map(i => obj.person[i]))
  console.log(obj.groups)