如何使用reduce将具有属性的对象分配给对象的属性
Posted
技术标签:
【中文标题】如何使用reduce将具有属性的对象分配给对象的属性【英文标题】:How to assign object with properties to property of an object using reduce 【发布时间】:2022-01-15 08:32:50 【问题描述】:我有这样的数据
const dataSet = [
'Transactions.productRef': 'SomeRef/123',
'Transactions.itemCount': 25,
'Transactions.revenue': 1000,
,
'Transactions.productRef': 'SomeRef/124',
'Transactions.itemCount': 35,
'Transactions.revenue': 500,
,
];
我正在尝试将一个具有属性的对象分配给“Transactions.productRef”的值,以获得类似的东西
'SomeRef/123':
productRef: 'SomeRef/123',
soldTickets: 25,
revenue: 1000,
,
'SomeRef/124':
productRef: 'SomeRef/124',
soldTickets: 35,
revenue: 500,
然后用对象创建一个新数组。 我已经尝试过这样的事情
const dataSet = [
'Transactions.productRef': 'SomeRef/123',
'Transactions.itemCount': 25,
'Transactions.revenue': 1000,
,
'Transactions.productRef': 'SomeRef/124',
'Transactions.itemCount': 35,
'Transactions.revenue': 500,
,
];
const productMap = ;
dataSet.reduce((data, p) =>
p[data['Transactions.productRef']] = p[data['Transactions.productRef']]
|| ;
p[data['Transactions.productRef']].soldTickets =
data['Transactions.itemCount'];
p[data['Transactions.productRef']].revenue =
data['Transactions.revenue'];
p[data['Transactions.productRef']].productRef =
data['Transactions.productRef'];
return p;
, productMap);
const newData = Object.values(productMap);
console.log(newData);
但console.log
返回一个空数组,就像数据从未分配给productMap
对象一样。我究竟做错了什么?提前致谢!
【问题讨论】:
.reduce()
回调的参数是(previousValue, currentValue) => ... )
。您已经在脚本中交换了它们,因此 data
将是 productMap
/
我完全忽略了这一点,谢谢!
【参考方案1】:
在reduce
回调输入中交换p
和data
,如下所示。
因为第一个参数是previousValue
,第二个参数是currentValue
。
dataSet.reduce((p, data) =>
p[data['Transactions.productRef']] = p[data['Transactions.productRef']]
|| ;
p[data['Transactions.productRef']].soldTickets =
data['Transactions.itemCount'];
p[data['Transactions.productRef']].revenue =
data['Transactions.revenue'];
p[data['Transactions.productRef']].productRef =
data['Transactions.productRef'];
return p;
, productMap);
【讨论】:
@Milos,看看这个!!以上是关于如何使用reduce将具有属性的对象分配给对象的属性的主要内容,如果未能解决你的问题,请参考以下文章