我想把两个json合并在一起

cyyjm 2020-10-29 04:28:12
我想得到一个这样的json

[
{'id':1,'array1':2,'array2':3,'array3':4},
{'id':2,'array1':3,'array2':4},
{'id':3,'array1':4,'array2':5,'array3':6,'array4':7,'array5':8}
]
根据通过两个不同json下的id关联在一起。
jsonA:

[{'id':1},{'id':2},{'id':3}]
jsonB:

[
{'id':1,'array':[2,3,4]},
{'id':2,'array':[3,4]},
{'id':3,'array':[5,6,7,8]}
]
我该怎么实现呢?
...全文
3499 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2020-10-30
  • 打赏
  • 举报
回复
引用 1 楼 jio可 的回复:

<script>
  var a = [{
    'id': 1
  }, {
    'id': 2
  }, {
    'id': 3
  }]
  var b = [{
      'id': 1,
      'array': [2, 3, 4]
    },
    {
      'id': 2,
      'array': [3, 4]
    },
    {
      'id': 3,
      'array': [5, 6, 7, 8]
    }
  ]
  let arr = []
  a.forEach(item => {
    var json = {}
    var ob = b.find(j => j.id === item.id)
    json['id'] = item.id
    ob.array.forEach((o, index) => {
      json['array'+(++index)] = o
    })
    arr.push(json)
  })
  console.log(arr)
</script>
1楼的答案就已经可以了,而且也容易理解。 如果A与B的数据有可能存在不是必然的一一配对,那ob.array.forEach前加个判断就行了 ob.array && ob.array.forEach 如果想直接让A([{'id':1},{'id':2},{'id':3}])变成你要的的结果,那里面的那些arr,json不要定义,在ob.array.forEach中直接操作A['array'+(++index)]即可 像下面这样:

const arr1 = [{'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}];
const arr2 = [
  {'id': 1, 'array': [2, 3, 4]},
  {'id': 2, 'array': [3, 4]},
  {'id': 3, 'array': [5, 6, 7, 8]}
]
arr1.forEach(v1 => {
  let arrTemp = arr2.find(v2 => v2.id === v1.id);
  /**
   * 如果有TypeScript。可使用可选链优化下面语句写法
   * arrTemp?.array?.forEach()
   */
  arrTemp && arrTemp.array && arrTemp.array.forEach((v3, idx) => {
    v1['array' + (++idx)] = v3;
  });
})
console.log(JSON.stringify(arr1, null, 2));
葉幺 2020-10-30
  • 打赏
  • 举报
回复
合并数组 array.concat(array1,array2);
落落叶叶无声 2020-10-30
  • 打赏
  • 举报
回复

var jsonA = [{'id':1, t: 1},{'id':2, t: 2},{'id':3, t: 3}] 

var jsonB = [
              {'id':1,'array':[2,3,4]},
              {'id':2,'array':[3,4]},
              {'id':3,'array':[5,6,7,8]}
  ]
 
function merge(jsonA, jsonB) {
  let result = []
  for(let item of jsonA) {
    let found = jsonB.find(each => each.id === item.id)
    let obj = found.array.reduce((obj, v, i) => {
      obj['id'] = item.id
      obj['array' + (i + 1)] = v
      Object.assign(obj, item)
      return obj
    }, {})
    result.push(obj)
  }
  return result;
}

console.log(merge(jsonA, jsonB))
hgwyl 2020-10-29
  • 打赏
  • 举报
回复
哦……你是要jsonA和jsonB,合并成一个大的…… 一样咯,判断长度,循环拼接
hgwyl 2020-10-29
  • 打赏
  • 举报
回复
jsonA:应该比较简单了。 jsonB:判断一下长度,再提取出来。 如果是我,就用和这个笨办法。
jio可 2020-10-29
  • 打赏
  • 举报
回复

<script>
  var a = [{
    'id': 1
  }, {
    'id': 2
  }, {
    'id': 3
  }]
  var b = [{
      'id': 1,
      'array': [2, 3, 4]
    },
    {
      'id': 2,
      'array': [3, 4]
    },
    {
      'id': 3,
      'array': [5, 6, 7, 8]
    }
  ]
  let arr = []
  a.forEach(item => {
    var json = {}
    var ob = b.find(j => j.id === item.id)
    json['id'] = item.id
    ob.array.forEach((o, index) => {
      json['array'+(++index)] = o
    })
    arr.push(json)
  })
  console.log(arr)
</script>

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧