javascript - 从数组中检索条件数量的对象
问题描述
试图找出如何从对象数组中检索最大数量的记录
假设我有一个这样的对象数组(我已经减少了可读性的数量,但可能有数百个)
[
{ name: 'Roger East',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-09-20T14:00:00.000Z
},
{ name: 'Roger East',
kick_off: 2021-09-19T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-08-10T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
}
]
对于我的示例,我可能只想检索每个唯一的 1、2、3 或 4 条记录name
(按最新启动日期排序,尽管它们在数组中按 kick_off 顺序排列,因此可能不需要该逻辑)
因此,假设在我的原始对象中,我有 100 条 Roger East 的记录,90 条 Mike Dean 的记录和 50 条 Anthony Taylor 的记录。我想返回数组中每个名称的前 3 条记录(希望有意义)
所以我最终会得到
[
{ name: 'Roger East',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Roger East',
kick_off: 2021-10-01T14:00:00.000Z
},
{ name: 'Roger East',
kick_off: 2021-09-20T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-09-19T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-08-10T14:00:00.000Z
},
{ name: 'Mike Dean',
kick_off: 2021-08-10T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
},
{ name: 'Anthony Taylor',
kick_off: 2021-08-09T14:00:00.000Z
}
]
谢谢
解决方案
给你:
let data1 = [
{
name: 'Roger East',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-09-20T14:00:00.000Z'
},
{
name: 'Roger East',
kick_off: '2021-09-19T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-08-10T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-08-09T14:00:00.000Z'
}
];
let data2 = [
{
name: 'Roger East',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-01T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-02T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-09-20T14:00:00.000Z'
},
{
name: 'Roger East',
kick_off: '2021-09-19T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-06T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-11-07T14:00:00.000Z'
},
{
name: 'Mike Dean',
kick_off: '2021-08-10T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-08-09T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-22T14:00:00.000Z'
},
{
name: 'Anthony Taylor',
kick_off: '2021-10-24T14:00:00.000Z'
},
];
const limitEachNameByNumber1 = 1;
const limitEachNameByNumber2 = 3;
function receiveFilteredData(data, limit) {
let filteredData = [];
let counter = {};
for (let record of data) {
if (!counter[record.name]) {
counter[record.name] = 0;
}
if (counter[record.name] >= limit) {
continue;
}
filteredData.push(record);
counter[record.name] ++;
}
return filteredData;
}
console.log(receiveFilteredData(data1, limitEachNameByNumber1));
console.log(receiveFilteredData(data2, limitEachNameByNumber2));
推荐阅读
- c# - 如何在 NewWindow2 事件中获取弹出 URL?
- flutter - 如何通过模型(父类和子类)访问 API 响应数据?
- python - 如何使用张量流 tf.losses.softmax_cross_entropy?
- scala - 循环列表调用不同的函数
- java - 多次编译后 ArrayList Titles 混乱
- angular5 - 如何使用 Angular5 使用 SendGrid 发送邮件?
- python - REST API 过滤器/使用烧瓶排序(和 webargs、marshmallow、sqlalchemy)
- amazon-web-services - 使用 boto3 时如何提高我的 AWS s3 上传速度?
- javascript - 'stateMachineArn' 处的值为 null 未能满足约束:成员不得为 null
- python - 是否可以在 Keras 中释放 GPU 分配的资源?