如何使用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 回调输入中交换pdata,如下所示。

因为第一个参数是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将具有属性的对象分配给对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

使用循环将属性分配给对象

如何将属性分配给 jQuery 对象?

将具有对象属性的数组分组的最佳方法以及如何呈现结果

如何将一个对象数组的一个属性的值分配给另一个对象数组的同名属性? - Javascript

打字稿如何将ajax对象分配给属性? [复制]

过滤后如何将分配的属性保留给查询集对象?备择方案?