我在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。
谢谢。
如果您可以使用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);