如何对一组对象进行分组并将其映射到不同的结构?
Posted
技术标签:
【中文标题】如何对一组对象进行分组并将其映射到不同的结构?【英文标题】:How to group an array of objects and mapping it to a different structure? 【发布时间】:2021-12-27 03:57:43 【问题描述】:这实际上是关于映射一组对象并将其分组。有没有办法在没有 lodash 的情况下以 javascript 方式转换这个数组
let fruits = [
id: 1,
expired_date: "2021-11-30",
name: "mango"
,
id: 2,
expired_date: "2021-11-20",
name: "kiwi"
,
id: 3,
expired_date: "2021-11-20",
name: "orange"
,
id: 4,
expired_date: "2021-11-10",
name: "banana"
,
id: 5,
expired_date: "2021-11-10",
name: "apple"
]
分组到这样的东西? (按对象中的一个键分组,用2个键包裹在一个对象中,一个包含类别,另一个包含与组相关的对象)
let fruits = [
expired_date: "2021-11-30",
rows: [
id: 1,
expired_date: "2021-11-30",
name: "mango"
]
,
expired_date: "2021-11-20",
rows: [
id: 2,
expired_date: "2021-11-20",
name: "kiwi"
,
id: 3,
expired_date: "2021-11-20",
name: "orange"
]
,
expired_date: "2021-11-10",
rows: [
id: 4,
expired_date: "2021-11-10",
name: "banana"
,
id: 5,
expired_date: "2021-11-10",
name: "apple"
]
]
我读过this question,但与预期的不太一样
【问题讨论】:
【参考方案1】:Array.reduce
应该可以工作
const fruits = [ id: 1, expired_date: "2021-11-30", name: "mango" , id: 2, expired_date: "2021-11-20", name: "kiwi" , id: 3, expired_date: "2021-11-20", name: "orange" , id: 4, expired_date: "2021-11-10", name: "banana" , id: 5, expired_date: "2021-11-10", name: "apple" ];
const result = Object.values(fruits.reduce((acc, item) =>
(acc[item.expired_date]??=expired_date: item.expired_date, rows: []).rows.push(item);
return acc;
, ));
console.log(result);
修改后未分配??=
,IE 不支持。
const result = Object.values(fruits.reduce((acc, item) =>
if (acc[item.expired_date])
acc[item.expired_date].rows.push(item);
else
acc[item.expired_date] = expired_date: item.expired_date, rows: [item];
return acc;
, ));
【讨论】:
谢谢,但??=
是什么意思?我得到了SyntaxError: Unexpected token '??='
@lorem_impus 逻辑无效赋值 (??=) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
我应用了第二个版本。成功了,谢谢。以上是关于如何对一组对象进行分组并将其映射到不同的结构?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?