从按 id 分组的 2 个 JSON 对象创建新的 javascript 对象

赛123

我有下面的动态嵌套 JSON 对象数组,我想使用 JavaScript 从两者中按 id 分组获得所需的输出。

第一个数组:

[
  {
    "id": "11",
    "name": "emp1",
    "location": [
      { "name": "abc", "id": "lc1" }
    ]
  },
  {
    "id": "11",
    "name": "emp2",
    "location": [
      { "name": "abc", "id": "lc1" },

    ]
  },
  {
    "id": "22",
    "name": "emp3",
    "location": [
      { "name": "xyz", "id": "lc2" }
    ]
  }
]

如下所示的第二个数组。

[
  {
    "name": "sub1",
    "id": "11"
    ...
  },
  {
    "name": "sub1.1",
    "id": "11"
    ...
  },
  {
    "name": "sub2",
    "id": "22"
    ...
  }
]

期望输出:

[
  {
    "id": "11",
    "first": [{"name": "emp1"},
              {"name": "emp2"}],
    "second": [{"name": "sub1"},{"name": "sub1.1"}],
    "location": [{"name": "abc"}]
  },
  {
    "id": "22",
    "first": [{"name": "emp3"}],
    "second": [{"name": "sub2"}],
    "location": [{"name": "xyz"}]
  }
]

如何使用 javascript/angularjs 获得上述所需的输出?

坦迈

我会使用惊人的Array#reduce功能来做到这一点

请注意,我已将您的第一个数组命名为a1,第二个为a2,结果为res

a1.reduce(function(arr, obj) {
  var existing = arr.filter(function(res) {
    return res.id === obj.id
  })[0]
  if (existing) {
    existing.first.push({
      name: obj.name
    })
  } else {
    var second = a2.filter(function(res) {
      return res.id === obj.id
    })

    var secondObj = second.length ? second.map(function(sec) {
      return {
        name: sec.name
      };
    }) : []

    arr.push({
      id: obj.id,
      first: [{
        name: obj.name
      }],
      second: secondObj,
      location: obj.location
    })
  }

  return arr;
}, [])

这是工作片段。看一看!

var a1 = [{
    "id": "11",
    "name": "emp1",
    "location": [{
      "name": "abc",
      "id": "lc1"
    }]
  },
  {
    "id": "11",
    "name": "emp2",
    "location": [{
      "name": "abc",
      "id": "lc1"
    }]
  },
  {
    "id": "22",
    "name": "emp3",
    "location": [{
      "name": "xyz",
      "id": "lc2"
    }]
  }
]

var a2 = [{
    "name": "sub1",
    "id": "11"
  }, {
    "name": "sub1.1",
    "id": "11"
  },
  {
    "name": "sub2",
    "id": "22"
  }
]

var res = a1.reduce(function(arr, obj) {
  var existing = arr.filter(function(res) {
    return res.id === obj.id
  })[0]
  if (existing) {
    existing.first.push({
      name: obj.name
    })
  } else {
    var second = a2.filter(function(res) {
      return res.id === obj.id
    })

    var secondObj = second.length ? second.map(function(sec) {
      return {
        name: sec.name
      };
    }) : []

    arr.push({
      id: obj.id,
      first: [{
        name: obj.name
      }],
      second: secondObj,
      location: obj.location
    })
  }

  return arr;
}, [])

console.log(res)
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按ID对JavaScript对象进行分组

来自分类Dev

使用JavaScript比较2个数组并创建一个新的对象数组,其中不包含按id字段匹配的对象

来自分类Dev

在Javascript中按Id过滤json对象

来自分类Dev

Javascript按对象数组(复杂对象)分组

来自分类Dev

按 2 个 ID 分组的 SQL

来自分类Dev

Javascript - 按对象数组中对象的一个属性分组

来自分类Dev

在Json对象中按列名称分组

来自分类Dev

比较2个数组的对象并找到匹配的颜色ID,然后创建一个新的数组Javascript

来自分类Dev

JavaScript按ID合并对象

来自分类Dev

按日期分组对象

来自分类Dev

按条件分组对象

来自分类Dev

按对象属性分组

来自分类Dev

JSON对象数组。将对象值按名称分组

来自分类Dev

将数组对象按两个元素和求和值分组(JavaScript)

来自分类Dev

RxJava2 按 Id 将对象分组到 HaspMap 并对其进行排序

来自分类Dev

构建一个分组的 JSON 对象

来自分类Dev

使用jQuery按类别ID对数组对象进行分组

来自分类Dev

猫鼬按属性分组的最后一个对象

来自分类Dev

按元素/对象拆分JSON并创建新的JSON

来自分类Dev

Json.net:按对象ID合并两个json数组

来自分类Dev

Javascript-按对象数组中的数据分组

来自分类Dev

按值对数组对象进行分组 - javascript

来自分类Dev

按数组中的对象分组

来自分类Dev

按日期分组对象数组

来自分类Dev

按年份分组对象数组

来自分类Dev

按日期分组对象值

来自分类Dev

按数组逐对象分组

来自分类Dev

按关联对象的属性分组

来自分类Dev

数组对象按元素分组?