提问者:小点点

Node.js JavaScript:按多个键值减少对象数组


我在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和assigned_agent键对其进行分组。我试过filter函数的例子,但没有运气。不是,数组中还有其他键/值对,但为了清楚起见省略了它们。另外,虽然这是一个node.js脚本,但如果有帮助的话,我确实有可用的Lodash。

谢谢。


共2个答案

匿名用户

如果您可以使用lodash,请尝试groupby

null

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>

匿名用户

null

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);