gpt4 book ai didi

javascript - Ramda.js 组合两个共享相同属性 ID 的对象数组

转载 作者:搜寻专家 更新时间:2023-11-01 05:28:31 28 4
gpt4 key购买 nike

我有这两个对象数组

todos: [
{
id: 1,
name: 'customerReport',
label: 'Report send to customer'
},
{
id: 2,
name: 'handover',
label: 'Handover (in CRM)'
},
]

和:

todosMoreDetails: [
{
id: 1,
checked: false,
link: {
type: 'url',
content: 'http://something.com'
},
notes: []
},
{
id: 2,
checked: false,
link: {
type: 'url',
content: 'http://something.com'
},
notes: []
}
]

因此最终的对象数组将是两者的组合,基于对象 ID,如下所示:

FinalTodos: [
{
id: 1,
checked: false,
link: {
type: 'url',
content: 'http://something.com'
},
notes: [],
name: 'customerReport',
label: 'Report send to customer'
},
{
id: 2,
checked: false,
link: {
type: 'url',
content: 'http://something.com'
},
notes: [],
name: 'handover',
label: 'Handover (in CRM)'
}
]

我尝试使用 merge mergeAllmergeWithKey 但我可能遗漏了一些东西

最佳答案

您可以使用中间 groupBy 实现此目的:

使用 groupBy 将 todosMoreDetails 数组转换为以 todo 属性 ID 为键的对象:

var moreDetailsById = R.groupBy(R.prop('id'), todosMoreDetails);

moreDetailsById是一个对象,key是id,value是todos的数组。如果 id 是唯一的,这将是一个单例数组:

{
1: [{
id: 1,
checked: false,
link: {
type: 'url',
content: 'http://something.com'
},
notes: []
}]
}

现在通过将每个待办事项合并到您从分组 View 中检索到的详细信息来转换待办事项数组:

var finalTodos = R.map(todo => R.merge(todo, moreDetailsById[todo.id][0]), todos);

另一种更详细的方法:

function mergeTodo(todo) {
var details = moreDetailsById[todo.id][0]; // this is not null safe
var finalTodo = R.merge(todo, details);
return finalTodo;
}

var moreDetailsById = R.groupBy(R.prop('id'), todosMoreDetails);
var finalTodos = todos.map(mergeTodo);

关于javascript - Ramda.js 组合两个共享相同属性 ID 的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42697819/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com