【问题标题】:Node.js javascript: Reduce Array of Object by Multiple Key ValueNode.js javascript:通过多个键值减少对象数组
【发布时间】:2020-11-16 14:46:58
【问题描述】:

我在 Node.js 脚本中有以下对象数组:

[ 
{ 
    start: '10-05-2018',    
    assigned_agent: '1257434'
     },
  { 
    start: '10-05-2018',
    assigned_agent: '1257434'
    },
  { 
    start: '10-05-2018',
    assigned_agent: '1257434'
   },
  { 
    start: '10-06-2018',    
    assigned_agent: '1257434'
    },
  { 
    start: '10-05-2018',   
    assigned_agent: '1277852'
     },
  { 
    start: '10-05-2018',
    assigned_agent: '1277852'
  }
 ]

我需要的是按 start 和 assignment_agent 键对其进行分组。我尝试过filter 函数示例,但没有运气。不是,数组中还有其他键/值对,但为了清楚起见省略了它们。此外,虽然这是一个 Node.js 脚本,但如果有帮助,我确实可以使用 Lodash。

谢谢。

【问题讨论】:

  • 如果你想对它们进行分组,你需要 reduce 方法,而不是过滤器。
  • 谢谢。所以这应该是一个简单的解决方案。
  • 是的,你应该可以尝试一下自己。
  • var arr_new = Object.values(obj_agents_routes.reduce((acc, cur) => Object.assign(acc, { [cur.assigned_agent, cur.start]: cur }), {}) );
  • 出现意外的令牌错误。我需要找出每个值的“减少”。

标签: javascript node.js arrays filter


【解决方案1】:

如果你可以使用 lodash,试试groupBy

const data = [
  { start: "10-05-2018", assigned_agent: "1257434" },
  { start: "10-05-2018", assigned_agent: "1257434" },
  { start: "10-05-2018", assigned_agent: "1257434" },
  { start: "10-06-2018", assigned_agent: "1257434" },
  { start: "10-05-2018", assigned_agent: "1277852" },
  { start: "10-05-2018", assigned_agent: "1277852" },
]

const group_by_both = _.chain(data)
  .groupBy((el) => `${el.start} ${el.assigned_agent}`)
  .values()
  .value()

console.log(group_by_both)
.as-console-wrapper { max-height: 100% !important; }
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>

【讨论】:

  • 我对 Lodash 没问题,但我需要按每个数组对的两个值进行分组。让我试试你的解决方案。谢谢!
  • 嗨,你的答案有点工作,但不必要地附加:{ '10-05-2018 1257434': [ {
  • @IrfanClemson 您可以通过使用 _.values() 提取值来摆脱它
  • 您好,请更新您的答案,我会接受。我想我快到了。谢谢!
  • @IrfanClemson 刚刚更新,你可以看看
【解决方案2】:

var data = [{
    start: '10-05-2018',
    assigned_agent: '1257434'
  },
  {
    start: '10-05-2018',
    assigned_agent: '1257434'
  },
  {
    start: '10-05-2018',
    assigned_agent: '1257434'
  },
  {
    start: '10-06-2018',
    assigned_agent: '1257434'
  },
  {
    start: '10-05-2018',
    assigned_agent: '1277852'
  },
  {
    start: '10-05-2018',
    assigned_agent: '1277852'
  }
];

var grouped = data.reduce((accumulator, element) => {
    // group by start and agent, so combine values for unique key
    var key = element.start + element.assigned_agent;
    
    // if there is not already a grouping, make an empty array
    accumulator[key] = accumulator[key] || [];
    
    // add the element to the desired group
    accumulator[key].push(element);
    
    // return the accumulator for the next iteration
    return accumulator;
}, {});

console.log(grouped);

【讨论】:

  • 您好,感谢您的帮助!我已经开始回答 @hgb123 了。很确定你的也会有所帮助。再次感谢您!
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 2016-12-01
  • 2018-10-20
  • 2019-01-26
  • 2021-01-02
  • 2021-12-30
  • 2021-04-30
  • 2019-05-18
相关资源
最近更新 更多