gpt4 book ai didi

javascript - 从另一个对象插入嵌套属性

转载 作者:行者123 更新时间:2023-12-03 00:38:14 24 4
gpt4 key购买 nike

我有两个数组metaObjectsjustObjects

两个数组中的这些对象都具有共同的 id 属性。

我想创建一个新数组,组合不同数组中对象的属性

const metaObjects = [
{
id: 1,
metaProp: "metaProp1"
},
{
id: 2,
metaProp: "metaProp2"
}
];

const justObjects = [
{
id: 1,
justProp: "justProp1"
},
{
id: 2,
justProp: "justProp2"
}
];

这就是我期望的结果

const result= [
{
id: 1,
metaProp: "metaProp1",
justProp: "justProp1"
},
{
id: 2,
metaProp: "metaProp2",
justProp: "justProp2"
}
];

我尝试实现 map 的 map 来实现这一点

const combinedObject = justObjects.map(_w => {
return metaObjects.map(_m => {
if (_w.id === _m.id) {
return { ..._m, ..._w };
}
});
}, metaObjects);

console.log(combinedObject);

但我收到以下错误

[ [ { id: 1, metaProp: 'metaProp1', justProp: 'justProp1' },
undefined ],
[ undefined,
{ id: 2, metaProp: 'metaProp2', justProp: 'justProp2' } ] ]

我不确定为什么每个数组的内部数组都有一个undefined
另外,我需要展平数组,以便它们接近上面的预期结果。

我听说过 ramda 的可组合 lens 函数

可以用在这里吗?

最佳答案

这与 customcommander 的答案非常相似,但选择使用 groupByvalues而不是sortBygroupWith 。这对我来说感觉更符合逻辑,尤其是避免不必要的 sort 调用。

const {pipe, concat, groupBy, prop, values, map, mergeAll} = R

const joinOnId = pipe
( concat
, groupBy (prop ('id'))
, values
, map (mergeAll)
)

const metaObjects =
[ { id: 1, metaProp: "metaProp1" }
, { id: 2, metaProp: "metaProp2" }
, { id: 3, metaProp: "metaProp3" } // unique to `meta`
]

const justObjects =
[ { id: 1, justProp: "justProp1" }
, { id: 2, justProp: "justProp2" }
, { id: 4, justProp: "justProp4" } // unique to `just`
]

console.log
( joinOnId (metaObjects, justObjects)
)
.as-console-wrapper {
max-height: 100vh !important;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

请注意,可以轻松调整它以接受不同的属性名称:

const joinOn = (propName) =>
pipe
( concat
, groupBy (prop (propName))
, values
, map (mergeAll)
)
// ...
const joinOnId = joinOn ('id')

或使用任何常见的 key 生成函数:

const joinOn = (keyFn) =>
pipe
( concat
, groupBy (keyFn)
, values
, map (mergeAll)
)
// ...
const joinOnId = joinOn (prop ('id'))

关于javascript - 从另一个对象插入嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53566199/

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