javascript - 基于一个键合并两个对象数组而不展平它?
问题描述
这篇文章就像这篇文章的延续根据我喜欢@Trevors https://stackoverflow.com/a/51672402/9215279答案的键合并两个对象数组,但是如何合并数组而不使其变平?
更新代码
const users = [
{
id: 1,
name: 'Leanne Graham',
username: 'Bret',
email: 'Sincere@april.biz',
address: {
street: 'Kulas Light',
suite: 'Apt. 556',
city: 'Gwenborough',
zipcode: '92998-3874',
geo: {
lat: '-37.3159',
lng: '81.1496'
}
}
}
]
const posts = [
{
userId: 1,
id: 1,
title:
'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
body:
'quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto'
}
]
const mergeById = (a1, a2) =>
a1.map(itm => ({
...a2.find((item) => (item.id === itm.id) && item),
...itm
}));
console.log(mergeById(users, posts))
输出
[
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto",
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
}
}
]
你能建议如何输出这样的吗?
[
{
"posts": {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto"
},
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
}
}
]
解决方案
您可以遍历每个用户 using并通过比较和array#map
找到使用的帖子。array#find
userId
id
const users = [ { id: 1, name: 'Leanne Graham', username: 'Bret', email: 'Sincere@april.biz', address: { street: 'Kulas Light', suite: 'Apt. 556', city: 'Gwenborough', zipcode: '92998-3874', geo: { lat: '-37.3159', lng: '81.1496' } } } ],
posts = [ { userId: 1, id: 1, title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', body: 'quia et suscipit suscipit recusandae consequuntur expedita et cum reprehenderit molestiae ut ut quas totam nostrum rerum est autem sunt rem eveniet architecto' } ],
result = users.map(o => ({posts: posts.find(o => o.userId === o.id), ...o}));
console.log(result);
推荐阅读
- java - 为什么部署在heroku中的tomcat中的PUT方法的请求参数始终为NULL
- npm - “找不到命令:create-nuxt-app”有什么问题
- python - Python 中 PillowWriter 导出到 .gif 时出错
- flutter - 颤动中的不可滚动网格
- python - 如何将 keras 顺序 API 转换为功能 API
- powershell - 如何在代码执行期间禁用 Powershell GUI 按钮?
- sapui5 - sap.ui.table.Table 和可见行数
- python - 如何使用列表推导对 Python 3 中的矩阵执行数学运算?
- c++ - miDebuggerPath 无效
- python-3.x - 如何使用浮点数迭代整数列表?