gpt4 book ai didi

javascript - 如何在JS中通过三个不同的属性对嵌套对象数组进行分组

转载 作者:行者123 更新时间:2023-12-02 21:22:17 25 4
gpt4 key购买 nike

我有一个看起来像这样的对象数组

[
{store: {id: "1", metadata: {itemName: "Q", itemCode: "332", itemDueDate: "2021-10-28", …}}},
{store: {id: "2", metadata: {itemName: "WA", itemCode: "190", itemDueDate: "2021-08-23", …}}},
{store: {id: "3", metadata: {itemName: "P", itemCode: "199", itemDueDate: "2020-12-03", …}}}
]

如何通过使用元数据对象中的三个不同属性来对该数组进行分组,因此它将是以下内容的组合:

  1. 项目名称
  2. 商品代码
  3. 项目到期日期

我尝试使用 Ramda 的 GroupWith,但我刚刚发现它们在分组时使用连续顺序。

export const groupedItems = (items: ArchiveItems) => R.groupWith<ArchiveItems>((a, b) => {
return a.store.metadata.itemName === b.store.metadata.itemName &&
a.store.metadata.itemCode === b.store.metadata.itemCode &&
a.store.metadata.itemDueDate === b.store.metadata.itemDueDate
})(items)

最佳答案

是的,Ramda 的 groupWith设计用于对连续元素进行分组。 groupBy可能是您想要的。它需要一个函数将对象转换为字符串,然后将数组分组为一个对象,每个转换后的字符串都有一个数组。 您可以选择以您喜欢的方式创建该字符串,最常见的是通过提取单个属性。这里我们可以将多个属性组合成一个字符串:

const collect = pipe (
groupBy (({store: {metadata: m}}) => `${m.itemName}~${m.itemCode}~${m.itemDueDate}`),
values
)

const data = [{store: {id: "1", metadata: {itemName: "Q", itemCode: "332", itemDueDate: "2021-10-28", foo: "a"}}}, {store: {id: "2", metadata: {itemName: "WA", itemCode: "190", itemDueDate: "2021-08-23", foo: "b"}}}, {store: {id: "3", metadata: {itemName: "P", itemCode: "199", itemDueDate: "2020-12-03", foo: "c"}}}, {store: {id: "4", metadata: {itemName: "WA", itemCode: "190", itemDueDate: "2021-08-23", foo: "d"}}}, {store: {id: "5", metadata: {itemName: "P", itemCode: "199", itemDueDate: "2020-12-03", foo: "e"}}}, {store: {id: "6", metadata: {itemName: "WA", itemCode: "190", itemDueDate: "2021-08-23", foo: "f"}}}]

console .log (
collect (data)
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
<script> const {pipe, groupBy, values} = R </script>

我在这里猜测了你的实际结构,因为你发布的内容不是合法的JS。我还添加了其他项目,因为我们想演示当存在实际重复项时会发生什么。

请注意,最后的 values 调用会将其转换为数组的数组。您可以保留原始对象,但我想像 "P~199~2020-12-03" 这样的键可能不会很有帮助。或者您可能需要进行进一步的处理才能实现您的基本目标。

如果您的某些值可能包含 ~,您可能需要不同的分隔符。

关于javascript - 如何在JS中通过三个不同的属性对嵌套对象数组进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60814516/

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